2010-09-05 4 views
3

J'utilise cet exemple simple à comprendre Python getattr fonction:getattr de Python est appelé deux fois?

In [25]: class Foo: 
    ....:  def __getattr__(self, name): 
    ....:   print name 
    ....:   
    ....:   

In [26]: f = Foo() 

In [27]: f.bar 
bar 
bar 

Pourquoi bar imprimé deux fois? Utiliser Python 2.6.5.

+0

Quelle est la version que vous utilisez. Cela fonctionne pour moi comme prévu sur 2.6.5 avec les classes de style nouveau et ancien. – aaronasterling

Répondre

9

Je pense que c'est dû à IPython.

Pour « corriger », vous devez désactiver autocall: %autocall 0

C'est un effet secondaire inévitable de % autocall: car il doit analyser l'objet dans la ligne de commande pour voir si il est appelable, les déclencheurs python getattr appelle.

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

+0

Merci pour les détails! – thebossman

3

Vous utilisez également IPython. Le stock CPython REPL ne présente pas ce comportement.

Questions connexes