1) self
विधि हस्ताक्षर में एक स्पष्ट पैरामीटर के रूप में क्यों आवश्यक है?
क्योंकि विधियाँ कार्य करती हैं और foo.bar(baz)
इसके लिए सिंटैक्टिक शुगर है bar(foo, baz)
। कक्षाएं केवल शब्दकोश हैं जहां कुछ मूल्य कार्य हैं। (कंस्ट्रक्टर भी केवल कार्य हैं, यही कारण है कि पायथन की आवश्यकता नहीं है new
) आप कह सकते हैं कि पायथन यह स्पष्ट करता है कि ऑब्जेक्ट सरल घटकों से निर्मित हैं। यह "स्पष्ट रूप से निहित की तुलना में बेहतर है" के अनुसार है -विद्या।
इसके विपरीत, जावा वस्तुओं में वास्तव में जादू है और भाषा में सरल घटकों को कम नहीं किया जा सकता है। जावा में (कम से कम जावा 8 तक) एक फ़ंक्शन हमेशा एक वस्तु के स्वामित्व वाला एक तरीका होता है, और भाषा के स्थिर स्वरूप के कारण इस स्वामित्व को नहीं बदला जा सकता है। इसलिए जो this
संदर्भित करता है, उसके बारे में कोई अस्पष्टता नहीं है , इसलिए इसका अर्थ यह है कि इसे स्पष्ट रूप से परिभाषित किया गया है।
जावास्क्रिप्ट एक ऐसी भाषा का उदाहरण है this
, जिसमें जावा जैसा निहितार्थ है, लेकिन जहां पायथन जैसी वस्तुओं से अलग-अलग कार्य हो सकते हैं। यह इस बात के बारे में बहुत भ्रम पैदा this
करता है कि क्या संदर्भित करता है जब कार्यों को पास किया जाता है और विभिन्न संदर्भों में बुलाया जाता है। कई सहज रूप से लगता this
है कि फ़ंक्शन की कुछ आंतरिक संपत्ति को संदर्भित करना चाहिए, जबकि यह वास्तव में फ़ंक्शन को जिस तरह से कहा जाता है, उसी से पूरी तरह से निर्धारित होता है। मेरा मानना है कि this
पाइथन की तरह एक स्पष्ट पैरामीटर होने के कारण यह बहुत कम भ्रमित करेगा।
स्पष्ट- self
व्यास के कुछ अन्य लाभ :
डेकोरेटर सिर्फ ऐसे कार्य हैं जो अन्य कार्यों को लपेटते हैं। चूंकि विधियां सिर्फ कार्य हैं, सज्जाकार ठीक तरीकों पर काम करते हैं। यदि किसी प्रकार का निहितार्थ था, तो सज्जाकार पारदर्शी तरीके से काम नहीं करेंगे।
Classmethods और स्थिर विधियाँ एक उदाहरण पैरामीटर नहीं लेते हैं। क्लासमेथोड्स पहले तर्क (आमतौर पर कहा जाता है ) के रूप में एक वर्ग लेते हैं cls
। स्पष्ट self
या cls
पैरामीटर यह बहुत स्पष्ट करता है कि क्या चल रहा है, और आपके पास विधि में क्या है।
2) इंस्टेंस वेरिएबल्स को हमेशा योग्य क्यों होना चाहिए " self.
?
जावा में, आपको " this.
" के साथ सदस्य चर उपसर्ग करने की आवश्यकता नहीं है , लेकिन पायथन self.
में हमेशा " " आवश्यक है। कारण यह है कि पायथन के पास चर घोषित करने के लिए एक स्पष्ट वाक्यविन्यास नहीं है, इसलिए यह बताने का कोई तरीका नहीं होगा कि क्या x = 7
एक नया स्थानीय चर घोषित करना है या सदस्य चर को निर्दिष्ट करना है। निर्दिष्ट करना self.
इस अस्पष्टता को हल करता है।