Python クラスの属性/メソッドに対する 2 つのアンダースコアの意味は知っていますが、メソッドの引数に対しては何か意味がありますか?
二重アンダースコアで始まる引数をメソッドに渡すことはできないようです。通常の関数でそれを行うことができるため、混乱します。
次のスクリプトを検討してください。
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)