この簡単な例を使用して、Pythonのgetattr関数を理解しています。
In [25]: class Foo:
....: def __getattr__(self, name):
....: print name
....:
....:
In [26]: f = Foo()
In [27]: f.bar
bar
bar
なぜbar2回印刷されるのですか?Python2.6.5を使用します。
この簡単な例を使用して、Pythonのgetattr関数を理解しています。
In [25]: class Foo:
....: def __getattr__(self, name):
....: print name
....:
....:
In [26]: f = Foo()
In [27]: f.bar
bar
bar
なぜbar2回印刷されるのですか?Python2.6.5を使用します。
IPythonによるものだと思います。
それを「修正」するには、自動呼び出しを無効にする必要があります。%autocall 0
これは%autocallの避けられない副作用です。コマンドラインでオブジェクトを分析して呼び出し可能かどうかを確認する必要があるため、Pythonはgetattr呼び出しをトリガーします。
ソース: http: //mail.scipy.org/pipermail/ipython-user/2008-June/005562.html
IPythonも使用しています。標準のCPythonREPLは、この動作を示しません。