मैं सोच रहा था कि कक्षा के शरीर में या __init__
फ़ंक्शन के अंदर पाइथन में ऑब्जेक्ट विशेषताओं को प्रारंभ करने के लिए सबसे अच्छा अभ्यास क्या था?पाइथन कक्षा में प्रारंभिकरण/घोषणा का गुण: उन्हें कहां रखा जाए?
यानी
class A(object):
foo = None
बनाम
class A(object):
def __init__(self):
self.foo = None
समझ में आता है, मैंने सोचा कि वे दोनों मामलों में उदाहरण के लिए बाध्य थे ... धन्यवाद :) – fortran
पायथन के पास [विशेषता लुकअप नियम] का एक जटिल सेट है (http://www.cafepy.com/article/python_attributes_and_methods/ python_attributes_and_methods.html)। वर्णनकर्ताओं के बिना, इस मामले के लिए यह 'f .' कुंजी' के लिए पहले 'a .__ dict__' की खोज की गई है, और यदि यह वहां नहीं मिला है, तो' ए .__ dict__' खोजा गया है। यही कारण है कि आप 'a.foo' का उपयोग कर सकते हैं भले ही 'foo' एक क्लास विशेषता है। – unutbu
यह भी ध्यान देने योग्य है कि क्लास विशेषताओं के लिए, यदि आप 'a.foo = जो भी' करना चाहते थे, तो आप वास्तव में एक नया इंस्टेंस विशेषता बनाना चाहते हैं (जो कक्षा विशेषता को छुपाता है)। 'एफू' अपरिवर्तित होगा। यह थोडाचा है, क्योंकि आप 'एफू' के मूल्य को 'ए.फू' के साथ एक्सेस कर सकते हैं, लेकिन इसे असाइन करने से एक नया इंस्टेंस एट्रिब्यूट बन जाएगा। – Kat