Was Sie wahrscheinlich wollen, ist dir()
.
Der Haken an der Sache ist, dass Klassen in der Lage sind, die spezielle __dir__
Methode, die dazu führt, dass dir()
zurückgeben, was immer die Klasse will (obwohl sie aufgefordert werden, eine genaue Liste zurückzugeben, wird dies nicht erzwungen). Darüber hinaus können einige Objekte dynamische Attribute durch Überschreiben von __getattr__
können RPC-Proxy-Objekte oder Instanzen von C-Extension-Klassen sein. Wenn Ihr Objekt eines dieser Beispiele ist, haben sie möglicherweise keine __dict__
oder in der Lage sein, eine umfassende Liste von Attributen zu liefern über __dir__
Viele dieser Objekte können so viele dynamische Attribute haben, dass sie nicht wirklich erkannt werden. was hat, bis Sie versuchen, darauf zuzugreifen.
Auf kurze Sicht, wenn dir()
nicht ausreicht, können Sie eine Funktion schreiben, die die folgenden Schritte durchläuft __dict__
für ein Objekt, dann __dict__
für alle Klassen in obj.__class__.__mro__
Dies funktioniert allerdings nur für normale Python-Objekte. Auf lange Sicht müssen Sie vielleicht Enten-Typisierung + Annahmen verwenden - wenn es wie eine Ente aussieht, kreuzen Sie Ihre Finger und hoffen, dass es eine hat .feathers
.