¿Por qué no todos los nombres en el directorio(x) válido para el atributo de acceso?
-
20-08-2019 - |
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.
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 quedir()
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__
otype(obj).__dict__
, pero anula__getattr__
para volverAttributeError
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.