Python的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 个回答
3
你也在使用IPython。普通的CPython交互式命令行并不会出现这种情况。
9
我觉得这是因为IPython造成的。
要“解决”这个问题,你需要关闭自动调用功能:%autocall 0
这是%autocall的一个不可避免的副作用:因为它需要分析命令行中的对象,看看这个对象是否可以被调用,所以Python会对它触发getattr调用。
来源: http://mail.scipy.org/pipermail/ipython-user/2008-June/005562.html