Pregunta

¿Por qué un programador cosas cosas en __dict__ que no puede ser utilizado para el atributo de acceso?Por ejemplo, en mi Plone instancia, dir(portal) incluye index_html, pero portal.index_html plantea AttributeError.Esto también es cierto para el __class__ atributo de Products.ZCatalog.Catalog.mybrains.Hay una buena razón por la que dir() no puede ser de confianza?

Hurgando en la inspect módulo, veo que el uso de object.__dict__['x'] en lugar de atributo de acceso por esta razón y debido a que no quiere activar getattr magia.

¿Fue útil?

Solución

Yo no sé acerca de Plone, por lo que la siguiente es general.

De el docs de dir:

Si el objeto tiene un método llamado __dir__(), este método será llamado y debe regresar a la lista de los atributos.Esto permite a los objetos que implementar una costumbre __getattr__() o __getattribute__() función para personalizar la forma en que dir() los informes de sus los atributos.

Sólo una suposición, pero puedo pensar en dos cosas que pueden estar pasando -

  • El objeto tiene un __dir__() método que devuelve los atributos que no tiene

  • (menos probable) El objeto ha el atributo que estás pidiendo (es decir,es en obj.__dict__ o type(obj).__dict__, pero anula __getattr__ para volver AttributeError

EDITAR: __dir__ sólo es compatible con Python 2.6+, sin embargo el (obsoleto) atributos especiales __methods__ y __members__ se puede utilizar en lugar de las versiones anteriores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top