3

この簡単な例を使用して、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を使用します。

4

2 に答える 2

9

IPythonによるものだと思います。

それを「修正」するには、自動呼び出しを無効にする必要があります。%autocall 0

これは%autocallの避けられない副作用です。コマンドラインでオブジェクトを分析して呼び出し可能かどうかを確認する必要があるため、Pythonはgetattr呼び出しをトリガーします。

ソース: http: //mail.scipy.org/pipermail/ipython-user/2008-June/005562.html

于 2010-09-05T01:16:36.157 に答える
3

IPythonも使用しています。標準のCPythonREPLは、この動作を示しません。

于 2010-09-05T00:46:19.523 に答える