То, что вам, вероятно, нужно, это dir()
.
Подвох в том, что классы могут переопределить специальный метод __dir__
, который заставляет dir()
возвращать любой классхочет (хотя им рекомендуется возвращать точный список, это не применяется).Кроме того, некоторые объекты могут реализовывать динамические атрибуты путем переопределения __getattr__
, могут быть прокси-объектами RPC или могут быть экземплярами классов C-extension.Если ваш объект является одним из этих примеров, они могут не иметь возможности __dict__
или предоставить полный список атрибутов с помощью __dir__
: многие из этих объектов могут иметь столько динамических атрибутов, которых нетНа самом деле не будет знать, что имеет, пока вы не попытаетесь получить к нему доступ.
В краткосрочной перспективе, если dir()
недостаточно, вы можете написать функцию, которая пересекает __dict__
для объекта, затем __dict__
для всех классов в obj.__class__.__mro__
;хотя это будет работать только для обычных объектов Python.В конечном счете, вам, возможно, придется использовать утку, набрав + предположения - если это похоже на утку, скрестите пальцы и надейтесь, что она имеет .feathers
.