Question

Pourquoi un codeur insère-t-il dans __dict__ des éléments qui ne peuvent pas être utilisés pour l'accès aux attributs? Par exemple, dans mon instance Plone, dir(portal) inclut index_html, mais portal.index_html déclenche AttributeError. Ceci est également vrai pour l'attribut __class__ de Products.ZCatalog.Catalog.mybrains. Existe-t-il une bonne raison pour ne pas pouvoir faire confiance à dir()?

En fouillant dans le module inspect, je vois qu'ils utilisent object.__dict__['x'] au lieu d'un accès par attribut pour cette raison et parce qu'ils ne veulent pas déclencher getattr magie.

Était-ce utile?

La solution

Je ne sais pas à propos de Plone, ce qui suit est général.

De la documentation de dir:

  

Si l'objet a une méthode nommée   __dir__(), cette méthode sera appelée et doit renvoyer la liste des   les attributs. Cela permet aux objets qui   implémenter une coutume __getattr__() ou   __getattribute__() fonction pour personnaliser la façon dont dir() rapporte leurs   attributs.

Devinez juste ici, mais je peux penser à deux choses qui peuvent se produire -

  • L'objet a une obj.__dict__ méthode qui renvoie des attributs qu'il n'a pas

  • (moins probable) L'objet a l'attribut que vous demandez (c'est-à-dire dans type(obj).__dict__ ou __getattr__, mais remplace AttributeError pour renvoyer __dir__

MODIFIER : __methods__ n'est pris en charge que par Python 2.6+. Toutefois, les attributs spéciaux (obsolètes) __members__ et <=> peuvent être utilisés à la place pour les versions antérieures.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top