我使用这个简单的例子来理解Python的 getattr 函数:
In [25]: class Foo:
....: def __getattr__(self, name):
....: print name
....:
....:
In [26]: f = Foo()
In [27]: f.bar
bar
bar
为什么bar
打印两次?使用Python 2.6.5。
答案 0 :(得分:9)
我认为这是由于IPython。
要“修复”它,您必须禁用自动调用:%autocall 0
这是不可避免的副作用 %autocall:因为它必须分析 对象在命令行中查看是否 它是可调用的,python触发getattr 呼吁它。
来源:http://mail.scipy.org/pipermail/ipython-user/2008-June/005562.html
答案 1 :(得分:3)
你也在使用IPython。库存CPython REPL不会出现此行为。