मुझे पता है कि पाइथन क्लास विशेषताओं/विधियों के लिए डबल अंडरस्कोर का क्या अर्थ है, लेकिन क्या इसका मतलब विधि तर्क के लिए कुछ है?पाइथन विधि के लिए डबल अंडरस्कोर * तर्क *
ऐसा लगता है कि आप विधियों के लिए डबल अंडरस्कोर से शुरू होने वाले तर्क को पारित नहीं कर सकते हैं। यह भ्रमित है क्योंकि आप सामान्य कार्यों के लिए ऐसा कर सकते हैं।
def egg(__a=None):
return __a
print "egg(1) =",
print egg(1)
print
class Spam(object):
def egg(self, __a=None):
return __a
print "Spam().egg(__a=1) =",
print Spam().egg(__a=1)
इस स्क्रिप्ट पैदावार चल रहा है::
egg(1) = 1
Spam().egg(__a=1) =
Traceback (most recent call last):
File "/....py", line 15, in <module>
print Spam().egg(__a=1)
TypeError: egg() got an unexpected keyword argument '__a'
मैं अजगर 2.7.2 के साथ इस जाँच की
इस स्क्रिप्ट पर विचार करें।
कुछ अन्य उदाहरण
यह काम करता है:
def egg(self, __a):
return __a
class Spam(object):
egg = egg
Spam().egg(__a=1)
यह नहीं करता है:
class Spam(object):
def _egg(self, __a=None):
return __a
def egg(self, a):
return self._egg(__a=a)
Spam().egg(1)
यदि ऐसा होता है "वे कहाँ पाए जाते हैं की परवाह किए बिना", मैं उम्मीद पिछले उदाहरण (एक मैं जोड़ा) काम करता है। मुझे लगता है मुझे पता है कि यह क्यों नहीं करता है; यह "वर्ग नामस्थान" या ऐसा कुछ होना चाहिए (मुझे नहीं पता कि इसके लिए सही शब्द क्या है), है ना? – tkf
मैं भी इसकी अपेक्षा करता हूं, और मुझे आश्चर्य है। मुझे लगता है कि यह दस्तावेज या कार्यान्वयन में एक दोष है। मैं अपने निष्कर्ष जोड़ने के लिए अभी संपादन कर रहा हूं। – delnan
मैं मानता हूं कि यह सुरुचिपूर्ण पैरामीटर नहीं है, लेकिन जब आपके पास फ़ंक्शन में 'self .__ dict __। अपडेट (kwds)' जैसा कुछ है, लेकिन फ़ंक्शन के व्यवहार को नियंत्रित करना चाहते हैं। एकमात्र वैध तर्क नाम मैं व्यवहार को नियंत्रित करने के बारे में सोच सकता हूं, वह डबल अंडरस्कोर से शुरू होता है। – tkf