Getattr Python вызывается дважды? - PullRequest
3 голосов
/ 05 сентября 2010

Я использую этот простой пример, чтобы понять функцию 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 ]

9 голосов
/ 05 сентября 2010

Я думаю, что это из-за IPython.

Чтобы «исправить» это, вы должны отключить авто-вызов:

Это неизбежный побочный эффект % autocall: так как он должен анализировать объект в командной строке, чтобы увидеть, если он вызывается, Python запускает getattr призывает к этому.

Источник: http://mail.scipy.org/pipermail/ipython-user/2008-June/005562.html

3 голосов
/ 05 сентября 2010

Вы также используете IPython. На бирже CPython REPL такого поведения нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...