2011-06-25 19 views
22

पाइथन में कक्षा के दायरे वाले वैश्विक चर को परिभाषित करने का सही तरीका क्या है?वैश्विक परिवर्तनीय पायथन कक्षा

एक C/C++/जावा पृष्ठभूमि से आ रहा है मुझे लगता है कि यह सही है:

class Shape: 
    lolwut = None 

    def __init__(self, default=0): 
     self.lolwut = default; 
    def a(self): 
     print self.lolwut 
    def b(self): 
     self.a() 
+4

हैं नीचे दिए गए उत्तर को आपको – Clintm

उत्तर

53

आप सही है, हालांकि आप इसे वैश्विक फोन नहीं होगा क्या है, यह एक वर्ग विशेषता है और पहुँचा जा सकता है वर्ग के माध्यम से Shape.lolwut या उदाहरण के माध्यम से उदाहरण के लिए shape.lolwut लेकिन जब यह स्थापित करने के रूप में यह एक उदाहरण स्तर सेट हो जाएगा सावधान रहना वर्ग विशेषता नहीं विशेषता

class Shape(object): 
    lolwut = 1 

shape = Shape() 

print Shape.lolwut, 
print shape.lolwut, 

# setting shape.lolwut would not change class attribute lolwut 
# but will create it in the instance 
shape.lolwut = 2 

print Shape.lolwut, 
print shape.lolwut, 

# to change class attribute access it via class 
Shape.lolwut = 3 

print Shape.lolwut, 
print shape.lolwut 

उत्पादन:

1 1 1 2 3 2 

किसी ने उत्पादन 1 1 2 2 3 3 होने की उम्मीद कर सकते हैं, लेकिन यह सही नहीं होगा और

+1

के रूप में स्वीकार करना चाहिए, मैं आपके उदाहरण का परीक्षण पायथन 2.7 में करता हूं, यह ठीक है। लेकिन जब आप पहले आकार के लिए मूल्य निर्धारित करते हैं। Lolwut, और आवृत्ति मान बदल दिया जाएगा। एक बार जब आप आवृत्ति विशेषता को मान सेट करते हैं, तो दोनों उदाहरण के समान ही कक्षा स्तर के मान को भी परिवर्तित नहीं करेंगे। – x4snowman

+0

@ डैन्युन मैंने भी परीक्षण किया। मैंने वही स्थिति देखी जैसा आपने उल्लेख किया था। क्या आप जानते हैं कि ऐसा क्यों होता है? जब आप वर्ग स्तर से विशेषता बदलते हैं तो इंस्टेंस भी बदल जाएगा। लेकिन जब आप पहले उदाहरण स्तर बदलते हैं, तो कक्षा स्तर से बदलते हैं, यह फिर से उदाहरण को प्रभावित नहीं करेगा। – user1167910

+0

@ user1167910 पाइथन दस्तावेज़ीकरण का संदर्भ लें https://docs.python.org/2.7/reference/datamodel.html, आपको 'एट्रिब्यूट असाइनमेंट्स और डिलीशन इंस्टेंस के डिक्शनरी को अपडेट करें, कभी भी क्लास का डिक्शनरी' – x4snowman

संबंधित मुद्दे