Python的getattr调用了两次?

4 投票
2 回答
698 浏览
提问于 2025-04-16 03:43

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

撰写回答