Frage

Warum ein Coder Sache Dinge in __dict__ würde, die für Attribut Zugriff verwendet werden kann, nicht wahr? Zum Beispiel in meiner Plone-Instanz enthält dir(portal) index_html, aber portal.index_html wirft Attribute. Dies gilt auch für das __class__ Attribut Products.ZCatalog.Catalog.mybrains. Gibt es einen guten Grund, warum dir() nicht trauen kann?

Stochern der inspect Modul, ich sehe sie verwenden object.__dict__['x'] statt Attribut Zugriff aus diesem Grund und weil sie nicht wollen, getattr Magie auslösen.

War es hilfreich?

Lösung

Ich weiß nicht, über Plone, so dass die folgende ist allgemein.

die Dokumentation von dir:

  

Wenn das Objekt eine Methode mit dem Namen   __dir__(), wird diese Methode aufgerufen werden und muss zurückkehren, die Liste der   Attribute. Auf diese Weise können Objekte, dass   implementieren eine benutzerdefinierte __getattr__() oder   __getattribute__() Funktion anpassen die Art und Weise dir() berichtet ihre   Attribute.

Erraten Sie hier, aber ich kann zwei Dinge denken, die passieren können -

  • Das Objekt hat eine __dir__() Methode, gibt Attribute, die es nicht haben

  • (weniger wahrscheinlich) Das Objekt hat das Attribut Sie fragen, für (das heißt, es ist in obj.__dict__ oder type(obj).__dict__, aber überschreibt __getattr__ AttributeError zurück

Bearbeiten : __dir__ wird nur in Python unterstützt 2.6+, aber das (veraltet) spezielle Attribut __methods__ und __members__ kann stattdessen für frühere Versionen verwendet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top