ये 2 वर्ग कैसे भिन्न होते हैं?
class A():
x=3
class B():
def __init__(self):
self.x=3
क्या कोई महत्वपूर्ण अंतर है?
ये 2 वर्ग कैसे भिन्न होते हैं?
class A():
x=3
class B():
def __init__(self):
self.x=3
क्या कोई महत्वपूर्ण अंतर है?
जवाबों:
A.x
एक वर्ग चर है ।
B
के self.x
एक है उदाहरण चर ।
यानी A
की x
उदाहरणों के बीच साझा किया जाता है।
किसी ऐसी चीज़ के साथ अंतर प्रदर्शित करना आसान होगा जिसे सूची की तरह संशोधित किया जा सकता है:
#!/usr/bin/env python
class A:
x = []
def add(self):
self.x.append(1)
class B:
def __init__(self):
self.x = []
def add(self):
self.x.append(1)
x = A()
y = A()
x.add()
y.add()
print("A's x:", x.x)
x = B()
y = B()
x.add()
y.add()
print("B's x:", x.x)
उत्पादन
A's x: [1, 1]
B's x: [1]
बस एक पक्ष नोट के रूप में: self
वास्तव में सिर्फ एक अनियमित रूप से चुने शब्द, कि हर कोई उपयोग करता है, लेकिन आप भी इस्तेमाल कर सकते हैं this
, foo
या myself
या कुछ और आप चाहते हैं, यह सिर्फ एक वर्ग के लिए हर गैर स्थिर विधि के पहले पैरामीटर है। इसका मतलब है कि यह शब्द self
एक भाषा निर्माण नहीं है, बल्कि सिर्फ एक नाम है:
>>> class A:
... def __init__(s):
... s.bla = 2
...
>>>
>>> a = A()
>>> a.bla
2
एक्स एक वर्ग चर है, और ए के सभी उदाहरणों में साझा किया जाएगा, जब तक कि विशेष रूप से एक उदाहरण के भीतर ओवरराइड नहीं किया जाता है। Bx एक उदाहरण चर है, और B के प्रत्येक उदाहरण का अपना संस्करण है।
मुझे आशा है कि निम्नलिखित पायथन उदाहरण स्पष्ट कर सकते हैं:
>>> class Foo():
... i = 3
... def bar(self):
... print 'Foo.i is', Foo.i
... print 'self.i is', self.i
...
>>> f = Foo() # Create an instance of the Foo class
>>> f.bar()
Foo.i is 3
self.i is 3
>>> Foo.i = 5 # Change the global value of Foo.i over all instances
>>> f.bar()
Foo.i is 5
self.i is 5
>>> f.i = 3 # Override this instance's definition of i
>>> f.bar()
Foo.i is 5
self.i is 3
मैं इसे इस उदाहरण से समझाता था
# By TMOTTM
class Machine:
# Class Variable counts how many machines have been created.
# The value is the same for all objects of this class.
counter = 0
def __init__(self):
# Notice: no 'self'.
Machine.counter += 1
# Instance variable.
# Different for every object of the class.
self.id = Machine.counter
if __name__ == '__main__':
machine1 = Machine()
machine2 = Machine()
machine3 = Machine()
#The value is different for all objects.
print 'machine1.id', machine1.id
print 'machine2.id', machine2.id
print 'machine3.id', machine3.id
#The value is the same for all objects.
print 'machine1.counter', machine1.counter
print 'machine2.counter', machine2.counter
print 'machine3.counter', machine3.counter
आउटपुट तब होगा
machine1.id 1 मशीन २.द २ मशीन ३.द ३ मशीन 1। मुठभेड़ 3 मशीन 2। मुठभेड़ 3 मशीन 3। मुठभेड़ 3
मैंने अभी पायथन सीखना शुरू किया है और इसने मुझे कुछ समय के लिए भ्रमित कर दिया है। यह पता लगाने की कोशिश की जा रही है कि यह सब सामान्य रूप से कैसे काम करता है मैं इस बहुत ही सरल कोड के साथ आया:
# Create a class with a variable inside and an instance of that class
class One:
color = 'green'
obj2 = One()
# Here we create a global variable(outside a class suite).
color = 'blue'
# Create a second class and a local variable inside this class.
class Two:
color = "red"
# Define 3 methods. The only difference between them is the "color" part.
def out(self):
print(self.color + '!')
def out2(self):
print(color + '!')
def out3(self):
print(obj2.color + '!')
# Create an object of the class One
obj = Two()
जब हम फोन out()
करते हैं तो हमें मिलता है:
>>> obj.out()
red!
जब हम कॉल करते हैं out2()
:
>>> obj.out2()
blue!
जब हम कॉल करते हैं out3()
:
>>> obj.out3()
green!
तो, पहली विधि में self
निर्दिष्ट किया गया है कि पायथन को चर (विशेषता) का उपयोग करना चाहिए, जो कि हमारे द्वारा बनाई गई वर्ग वस्तु के लिए "संबंधित" है, न कि एक वैश्विक (वर्ग के बाहर)। तो यह उपयोग करता है color = "red"
। विधि में पायथन ने स्पष्ट रूप से self
हमारे द्वारा बनाई गई वस्तु ( obj
) के नाम का विकल्प दिया है । self.color
इसका मतलब है "मैं हो रही है color="red"
से obj
"
दूसरी विधि में self
उस ऑब्जेक्ट को निर्दिष्ट करने के लिए कोई भी नहीं है जहां से रंग लिया जाना चाहिए, इसलिए इसे वैश्विक मिल जाता है color = 'blue'
।
तीसरी विधि में self
हमने प्रयोग किया obj2
- किसी अन्य वस्तु का एक नाम जिससे प्राप्त color
किया जा सके। यह हो जाता है color = 'green'
।