मैं प्रोग्रामिंग के लिए बहुत नया हूं और पाइथन सीखना शुरू कर दिया हूं। बहुत बेवकूफ सवाल लग सकता है, तो कृपया मेरी अज्ञान क्षमा करें। पर विचार करें निम्नलिखित स्निपेट:पाइथन वर्ग विशेषताओं को समझना
class Test1:
bar = 10
def display(self,foo):
self.foo=foo
print "foo : ",self.foo #80
def display1(self):
print "bar: ", self.bar #10
print "again foo: ", self.foo #80
if __name__ == '__main__':
test1 = Test1()
test1.display(80)
test1.display1()
print test1.bar #10
print test1.foo #80
मैं समझने के लिए के रूप में क्षेत्र में बुद्धिमान वे की तुलना में सभी स्थानों पर समान रूप से सुलभ हैं (जहां हम उन्हें परिभाषित किया है करने के लिए wrt) foo और पट्टी का उपयोग कर के बीच अंतर है चाहता हूँ एक-दूसरे और केवल अंतर यह है कि एक कार्य के अंदर है और दूसरा कक्षा के अंदर है लेकिन वे दोनों अभी भी "इंस्टेंस" चर हैं। तो कौन सा अच्छा अभ्यास है?
इसके अलावा, अगर मैं थोड़ा नीचे के रूप में प्रदर्शन समारोह को संशोधित:
def display(self,foo):
self.foo=foo
foo = foo
print "self.foo : ",self.foo
print "foo : ",foo
किसी कृपया व्याख्या कर सकते हैं कि कैसे अजगर यह, देखता है क्या अंतर/महत्व इस self
कीवर्ड दो foo
के बीच में ला रहा है के रूप में।
नहीं, 'बार' * एक आवृत्ति चर नहीं है। दोनों बहुत अलग हैं, यही कारण है कि यह "अच्छी प्रथा" के बारे में नहीं है। यह आपकी स्थिति के लिए उपयुक्त है, क्योंकि वे विभिन्न उद्देश्यों की सेवा करते हैं। – phant0m
इसके अलावा 'self.bar' काम करता है क्योंकि नाम' बार' पहले उदाहरण के नामस्थान में और फिर कक्षा में खोजा जाता है। तथ्य यह है कि 'self.bar' काम * हमेशा * का मतलब नहीं है कि' बार' एक आवृत्ति चर है। – ersran9