जवाब, कुछ शब्दों में
आपके उदाहरण में, itsProblemएक स्थानीय चर है।
selfउदाहरण चर सेट करने और प्राप्त करने के लिए आपका उपयोग करना चाहिए । आप इसे __init__विधि में सेट कर सकते हैं । फिर आपका कोड होगा:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
लेकिन अगर आप एक सच्चे वर्ग चर चाहते हैं, तो सीधे वर्ग नाम का उपयोग करें:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
print (Example.itsProblem)
लेकिन इस एक के साथ सावधान रहें, जैसा theExample.itsProblemकि स्वचालित रूप से इसके बराबर होना तय हैExample.itsProblem , लेकिन बिल्कुल समान चर नहीं है और इसे स्वतंत्र रूप से बदला जा सकता है।
कुछ स्पष्टीकरण
पायथन में, चर गतिशील रूप से बनाए जा सकते हैं। इसलिए, आप निम्न कार्य कर सकते हैं:
class Example(object):
pass
Example.itsProblem = "problem"
e = Example()
e.itsSecondProblem = "problem"
print Example.itsProblem == e.itsSecondProblem
प्रिंट
सच
इसलिए, यह वही है जो आप पिछले उदाहरणों के साथ करते हैं।
वास्तव में, पायथन में हम इसका उपयोग selfकरते हैं this, लेकिन यह उससे थोड़ा अधिक है। selfकिसी भी वस्तु पद्धति का पहला तर्क है क्योंकि पहला तर्क हमेशा वस्तु संदर्भ होता है। यह स्वचालित है, चाहे आप इसे कॉल करें selfया नहीं।
जिसका अर्थ है आप कर सकते हैं:
class Example(object):
def __init__(self):
self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
या:
class Example(object):
def __init__(my_super_self):
my_super_self.itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
बिलकुल ऐसा ही है। किसी भी ऑब्जेक्ट विधि का पहला तर्क वर्तमान ऑब्जेक्ट है, हम केवल इसे selfएक सम्मेलन के रूप में कहते हैं । और आप इस ऑब्जेक्ट में सिर्फ एक चर जोड़ते हैं, उसी तरह आप इसे बाहर से करते हैं।
अब, वर्ग चर के बारे में।
जब तुम करोगे:
class Example(object):
itsProblem = "problem"
theExample = Example()
print(theExample.itsProblem)
आप देखेंगे कि हम पहले एक वर्ग चर सेट करते हैं , फिर हम एक वस्तु (उदाहरण) चर का उपयोग करते हैं । हम इस ऑब्जेक्ट चर को कभी सेट नहीं करते हैं लेकिन यह काम करता है, यह कैसे संभव है?
ठीक है, पायथन पहले ऑब्जेक्ट चर प्राप्त करने की कोशिश करता है, लेकिन अगर यह नहीं मिल सकता है, तो आपको कक्षा चर देगा। चेतावनी: वर्ग चर को उदाहरणों के बीच साझा किया जाता है, और ऑब्जेक्ट चर नहीं है।
निष्कर्ष के रूप में, ऑब्जेक्ट चर के लिए डिफ़ॉल्ट मान सेट करने के लिए कभी भी वर्ग चर का उपयोग न करें। उपयोग__init__ ।
आखिरकार, आप सीखेंगे कि पायथन कक्षाएं उदाहरण हैं और इसलिए खुद को ऑब्जेक्ट करता है, जो उपरोक्त समझने के लिए नई अंतर्दृष्टि देता है। वापस आओ और इसे बाद में फिर से पढ़ें, एक बार जब आप महसूस करते हैं।