Есть ли способ получить все атрибуты/методы/поля/etc. объекта в Python?
vars() близок к тому, что я хочу, но он не работает, если у объекта нет __dict__, что не всегда верно (например, это неверно для a list, a dict, и др.).
Есть ли способ получить все атрибуты/методы/поля/etc. объекта в Python?
vars() близок к тому, что я хочу, но он не работает, если у объекта нет __dict__, что не всегда верно (например, это неверно для a list, a dict, и др.).
Используйте встроенную функцию dir().
Что вы, возможно, хотите, это dir().
Ловушка заключается в том, что классы могут переопределять специальный метод __dir__, который заставляет dir() возвращать все, что хочет класс (хотя им рекомендуется возвращать точный список, это не применяется). Кроме того, некоторые объекты могут реализовать динамические атрибуты, переопределяя __getattr__, могут быть прокси-объектами RPC или могут быть экземплярами классов C-расширения. Если ваш объект является одним из этих примеров, у них может не быть __dict__ или он может предоставить полный список атрибутов через __dir__: у многих из этих объектов может быть так много динамических аттрибутов, которые он не знает на самом деле что у него есть, пока вы не попытаетесь получить к нему доступ.
В краткосрочном периоде, если dir() недостаточно, вы можете написать функцию, которая пересекает __dict__ для объекта, а затем __dict__ для всех классов в obj.__class__.__mro__; хотя это будет работать только для обычных объектов python. В конечном итоге вам, возможно, придется использовать утиную формулировку + предположения - если это похоже на утку, скрестите пальцы и надейтесь, что она имеет .feathers.
Я использую __dict__
Пример:
class MyObj(object):
def __init__(self):
self.name = 'Chuck Norris'
self.phone = '+6661'
obj = MyObj()
print(obj.__dict__)
# Output:
# {'phone': '+6661', 'name': 'Chuck Norris'}
Вы можете использовать dir(your_object) для получения атрибутов и getattr(your_object, your_object_attr) для получения значений
использование:
for att in dir(your_object):
print (att, getattr(your_object,att))