Python getattr被调用两次?

时间:2010-09-05 00:42:58

标签: python reflection python-2.6 getattr

我使用这个简单的例子来理解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。

2 个答案:

答案 0 :(得分:9)

我认为这是由于IPython。

要“修复”它,您必须禁用自动调用:%autocall 0

  

这是不可避免的副作用   %autocall:因为它必须分析   对象在命令行中查看是否   它是可调用的,python触发getattr   呼吁它。

来源:http://mail.scipy.org/pipermail/ipython-user/2008-June/005562.html

答案 1 :(得分:3)

你也在使用IPython。库存CPython REPL不会出现此行为。