我知道雙下劃線對於Python類屬性/方法意味着什麼,但這是否意味着方法參數的某些內容?Python方法的雙下劃線*參數*
看起來你不能將以雙下劃線開頭的參數傳遞給方法。這很令人困惑,因爲你可以爲普通功能做到這一點。
考慮這個腳本:
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'
我與Python 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 __。update(kwds)'之類的東西,但想要控制函數的行爲。我能想到的控制行爲的唯一有效參數名稱是以雙下劃線開始的。 – tkf