Есть ли способ получить все атрибуты / методы / поля / и т. Д. объекта в Python?
vars()
близко к тому, что я хочу, но он не работает, если объект не имеет __dict__
, что не всегда верно (например, это неверно для list
, dict
и т. Д.).
Есть ли способ получить все атрибуты / методы / поля / и т. Д. объекта в Python?
vars()
близко к тому, что я хочу, но он не работает, если объект не имеет __dict__
, что не всегда верно (например, это неверно для list
, dict
и т. Д.).
Используйте встроенную функцию dir()
.
dir()
часто манипулируют, чтобы показать интересные атрибуты, а не только все; например, он не показывает атрибуты, унаследованные через метакласс, или он может быть переопределен с помощью метода __dir__
.
- person SingleNegationElimination; 31.07.2011
func_defaults
.
- person fluffy; 18.08.2015
Вероятно, вам нужен dir()
.
Загвоздка в том, что классы могут переопределять специальный метод __dir__
, который заставляет dir()
возвращать все, что хочет класс (хотя им рекомендуется возвращать точный список, это не является обязательным). Кроме того, некоторые объекты могут реализовывать динамические атрибуты путем переопределения __getattr__
, могут быть прокси-объектами RPC или могут быть экземплярами классов C-расширений. Если ваш объект является одним из этих примеров, он может не иметь __dict__
или не иметь возможности предоставить исчерпывающий список атрибутов через __dir__
: многие из этих объектов могут иметь так много динамических атрибутов, что это не поможет » На самом деле я не знаю, что у него есть, пока вы не попытаетесь получить к нему доступ.
В краткосрочной перспективе, если dir()
недостаточно, вы можете написать функцию, которая просматривает __dict__
для объекта, а затем __dict__
для всех классов в obj.__class__.__mro__
; хотя это будет работать только для обычных объектов Python. В конечном итоге вам, возможно, придется использовать утиный ввод + предположения - если он выглядит как утка, скрестите пальцы и надейтесь, что это .feathers
.
attrs = dir(obj)
сохранит массив атрибутов в виде строк в attrs
. Затем, чтобы получить к ним доступ, вы всегда можете использовать getattr(obj, attrs[i])
, чтобы получить атрибут i
th в массиве attrs
.
- person Nick Merrill; 27.06.2014
__dict__
эта функция мне очень помогла.
- person Zhang LongQI; 11.05.2016
Я использую __dict__
и dir(<instance>)
Пример:
class MyObj(object):
def __init__(self):
self.name = 'Chuck Norris'
self.phone = '+6661'
obj = MyObj()
print(obj.__dict__)
print(dir(obj))
# Output:
# obj.__dict__ --> {'phone': '+6661', 'name': 'Chuck Norris'}
#
# dir(obj) --> ['__class__', '__delattr__', '__dict__', '__doc__',
# '__format__', '__getattribute__', '__hash__',
# '__init__', '__module__', '__new__', '__reduce__',
# '__reduce_ex__', '__repr__', '__setattr__',
# '__sizeof__', '__str__', '__subclasshook__',
# '__weakref__', 'name', 'phone']
__dict__
- иначе он мог бы использовать vars
- person strubbly; 08.09.2016
Вы можете использовать dir(your_object)
для получения атрибутов и getattr(your_object, your_object_attr)
для получения значений
использование :
for att in dir(your_object):
print (att, getattr(your_object,att))
for attr in dir(obj): print(attr +'()') if callable(getattr(obj, attr)) else print(attr)
# Скобки выводятся сразу после любых вызываемых объектов (функций, методов, классов и т. Д.)
- person veganaiZe; 02.03.2020
print(f'{att} : {getattr(myobject,att)}\n')
может помочь вам лучше читать ваш вывод
- person Jason Angel; 15.08.2020
attrs
существует__attrs_attrs__
. - person user202729   schedule 29.01.2021