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.

Foi útil?

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 caminho dir() 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__ ou type(obj).__dict__, mas substitui __getattr__ para retornar AttributeError

EDITAR: __dir__ é suportado apenas no Python 2.6+, no entanto, os atributos especiais (depreciados) __methods__ e __members__ pode ser usado para versões anteriores.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top