आगे माइक और एलेक्स की सलाह की गूंज और मेरा अपना रंग जोड़ने ...
उदाहरण विशेषताओं का उपयोग करना विशिष्ट है ... अधिक मुहावरेदार पायथन। वर्ग विशेषताओं का उपयोग उतना नहीं किया जाता है, क्योंकि उनके उपयोग के मामले विशिष्ट होते हैं। स्थिर और वर्ग विधियों बनाम "सामान्य" विधियों के लिए भी यही सच है। वे विशिष्ट उपयोग के मामलों को संबोधित करने वाले विशेष निर्माण हैं, अन्यथा यह एक असामान्य प्रोग्रामर द्वारा बनाया गया कोड है जो यह दिखाना चाहता है कि वे पायथन प्रोग्रामिंग के कुछ अस्पष्ट कोने को जानते हैं।
एलेक्स ने अपने उत्तर में उल्लेख किया कि एक कम स्तर की खोज के कारण पहुंच (थोड़ी सी) तेज होगी ... मुझे उन लोगों के लिए और स्पष्ट करना चाहिए जो इस बारे में नहीं जानते हैं कि यह अभी तक कैसे काम करता है। यह परिवर्तनशील पहुंच के समान है - जिसकी खोज क्रम है:
- स्थानीय लोगों
- nonlocals
- वैश्विक
- बनाया-इन
विशेषता पहुंच के लिए, आदेश है:
- उदाहरण
- कक्षा
- MRO द्वारा निर्धारित आधार कक्षाएं (विधि संकल्प आदेश)
दोनों तकनीक "अंदर-बाहर" तरीके से काम करती हैं, जिसका अर्थ है कि सबसे स्थानीय वस्तुओं को पहले चेक किया जाता है, फिर बाहरी परतों को उत्तराधिकार में जांचा जाता है।
ऊपर आपके उदाहरण में, मान लें कि आप pathविशेषता देख रहे हैं । जब यह " self.path" जैसे संदर्भ का सामना करता है , तो पायथन पहले मैच के लिए उदाहरण की विशेषताओं को देखेगा। जब वह विफल हो जाता है, तो वह उस वर्ग की जांच करता है, जहां से उस वस्तु का त्वरित मूल्यांकन किया गया था। अंत में, यह आधार वर्गों की खोज करेगा। जैसा कि एलेक्स ने कहा है, यदि आपका गुण उदाहरण में पाया जाता है, तो इसे कहीं और देखने की आवश्यकता नहीं है, इसलिए आपका थोड़ा सा समय बचता है।
हालाँकि, यदि आप वर्ग विशेषताओं पर जोर देते हैं, तो आपको उस अतिरिक्त खोज की आवश्यकता है। या , आपका अन्य विकल्प ऑब्जेक्ट को उदाहरण के बजाय वर्ग के माध्यम से संदर्भित करना है, जैसे, के MyController.pathबजाय self.path। यह एक प्रत्यक्ष लुकअप है जो आस्थगित लुकअप के आसपास मिलेगा, लेकिन जैसा कि नीचे उल्लेख किया गया है, यह एक वैश्विक वैरिएबल है, इसलिए आप उस बिट को खो देते हैं जो आपने सोचा था कि आप सहेजने जा रहे थे (जब तक कि आप [ग्लोबल] वर्ग के नाम का स्थानीय संदर्भ न बनाएं। )।
लब्बोलुआब यह है कि आप ज्यादातर समय उदाहरण विशेषताओं का उपयोग करना चाहिए। हालांकि, ऐसे अवसर होंगे जहां एक वर्ग विशेषता नौकरी के लिए सही उपकरण है। एक ही समय में दोनों का उपयोग करने वाले कोड को सबसे अधिक परिश्रम की आवश्यकता होगी, क्योंकि उपयोग करने से selfआपको केवल उसी नाम के वर्ग गुण तक पहुंच विशेषता ऑब्जेक्ट और छाया पहुंच प्राप्त होगी । इस स्थिति में, आपको इसे संदर्भित करने के लिए वर्ग नाम से विशेषता तक पहुंच का उपयोग करना चाहिए ।