二重アンダースコアは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)
を、私は最後の例(私は追加1)が動作します期待しています。私はなぜそれがないのか知っていると思います。それは "クラスネームスペース"かそのようなものでなければなりません(私はそれに対して正しい言葉が何か分かりません)、そうですか? – tkf
私はそれも期待していて、かなり驚いています。ドキュメントや実装の欠陥だと思います。私は私の所見を追加するために編集中です。 – delnan
私はそれがエレガントなパラメータではないことに同意しますが、関数内で 'self .__ dict __。update(kwds)'のようなものを持っていても、その関数の動作を制御したいときは、私が動作を制御するために考えることができる唯一の有効な引数名は、二重のアンダースコアで始まるものです。 – tkf