मैंने स्पष्टता और संगठनात्मक कारणों के लिए __init__
के अंदर कक्षा विशेषताओं को हमेशा घोषित करने का प्रयास किया है। हाल ही में, मैंने सीखा है कि इस अभ्यास के बाद सख्ती से अतिरिक्त गैर-सौंदर्य लाभ भी हैं PEP 412 को पायथन 3.3 के लिए जोड़ा जा रहा है। विशेष रूप से, यदि सभी गुण __init__
में परिभाषित किए गए हैं, तो ऑब्जेक्ट्स अपनी चाबियाँ और हैंश साझा करके स्थान को कम कर सकते हैं।क्या __init__ से बुलाए गए फ़ंक्शन में वैरिएबल घोषित करना अभी भी एक कुंजी-साझाकरण शब्दकोश का उपयोग करता है?
मेरा सवाल यह है कि ऑब्जेक्ट कुंजी-साझाकरण तब होता है जब __init__
द्वारा किसी फ़ंक्शन में विशेषता घोषित की जाती है?
यहाँ एक उदाहरण है:
class Dog:
def __init__(self):
self.height = 5
self.weight = 25
class Cat:
def __init__(self):
self.set_shape()
def set_shape(self):
self.height = 2
self.weight = 10
इस मामले में, Dog
के सभी उदाहरणों कुंजी height
और weight
का हिस्सा होगा। Cat
के उदाहरण भी height
और weight
(एक दूसरे के बीच, Dog
के साथ नहीं) को साझा करें।
एक तरफ के रूप में, आप इसका परीक्षण कैसे करेंगे?
नोट ब्रैंडन रोड्स ने कहा कि में अपने Dictionary Even Mightier talk इस बारे में महत्वपूर्ण के बंटवारे:
एक एकल कुंजी जोड़ा जाता है कि चाबियों का प्रोटोटाइप सेट में नहीं है, आप ढीला कुंजी साझा करने
सीधे आपके प्रश्न का उत्तर नहीं दे रहा है, लेकिन PyCharm में निरीक्षण हैं जो चेतावनी देते हैं कि क्या आप '__init__' के बाहर नए विशेषताओं को बनाते हैं। तो वे शायद, यह एक बुरा अभ्यास मानते हैं। – wim