जवाब है, कुछ शब्दों में
में अपने उदाहरण के लिए, 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
किसी ऑब्जेक्ट विधि का पहला तर्क है क्योंकि पहला तर्क हमेशा वस्तु संदर्भ होता है। यह स्वचालित है, चाहे आप इसे स्वयं कहते हैं या नहीं।
आप कर सकते हैं इसका मतलब है:
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__
का उपयोग करें।
आखिरकार, आप सीखेंगे कि पायथन कक्षाएं उदाहरण हैं और इसलिए स्वयं को ऑब्जेक्ट करती हैं, जो उपरोक्त को समझने के लिए नई अंतर्दृष्टि प्रदान करती हैं। एक बार जब आप इसे महसूस कर लेंगे, तो वापस आएं और बाद में इसे पढ़ें।
शीर्षक संपादित, वास्तव में के बारे में वर्ग "स्थिर" चर प्रश्न: http://stackoverflow.com/questions/707380/in-python-how-can-i-access- स्थैतिक-वर्ग-चर-इन-क्लास-विधियों –