Por que todos os nomes no dir (x) não são válidos para acesso a atributos?
-
20-08-2019 - |
Pergunta
Por que um codificador enfatizaria as coisas __dict__
que não pode ser usado para acesso a atributos? Por exemplo, na minha instância, dir(portal)
inclui index_html
, mas portal.index_html
Aumentos atribui -seror. Isso também é verdade para o __class__
atributo de Products.ZCatalog.Catalog.mybrains
. Existe uma boa razão para dir()
Não pode ser confiável?
Cutucando ao redor do inspect
módulo, vejo que eles usam object.__dict__['x']
em vez de atribuir acesso a esse motivo e porque eles não querem acionar getattr
Magia.
Solução
Eu não sei sobre Plone, então o seguinte é geral.
A partir de os documentos do dir
:
Se o objeto tiver um método chamado
__dir__()
, esse método será chamado e deve retornar a lista de atributos. Isso permite objetos que implementam um costume__getattr__()
ou__getattribute__()
função para personalizar o caminhodir()
relata seus atributos.
Apenas adivinhando aqui, mas posso pensar em duas coisas que podem estar acontecendo--
O objeto tem um
__dir__()
método que retorna atributos que não tem(menos provável) o objeto tem o atributo que você está pedindo (ou seja, está em
obj.__dict__
outype(obj).__dict__
, mas substitui__getattr__
para retornarAttributeError
EDITAR: __dir__
é suportado apenas no Python 2.6+, no entanto, os atributos especiais (depreciados) __methods__
e __members__
pode ser usado para versões anteriores.