6

Получить все атрибуты объекта в Python?

9

Описание проблемы:

Я ищу способ получить все атрибуты, методы, поля и т.д. объекта в Python. Я пробовал использовать функцию vars(), но она не работает для объектов, у которых нет атрибута __dict__. Это ограничение не позволяет мне получить нужную информацию для некоторых встроенных типов, таких как list, dict и т.д.

Мне нужно решение, которое будет работать для любых объектов в Python, независимо от их типа. Есть ли другие подходы или функции, которые могут помочь решить эту задачу?

2 ответ(ов)

1

Вам нужно получить доступ к атрибутам объекта в Python? Вы можете использовать встроенный метод __dict__ и функцию dir().

Вот пример:

class MyObj(object):
    def __init__(self):
        self.name = 'Chuck Norris'
        self.phone = '+6661'

obj = MyObj()
print(obj.__dict__)
print(dir(obj))

Вывод будет следующим:

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']
  • obj.__dict__ возвращает словарь, содержащий все атрибуты экземпляра, которые вы инициализировали в методе __init__. В данном случае это {'phone': '+6661', 'name': 'Chuck Norris'}.
  • dir(obj) предоставляет список всех атрибутов и методов объекта, включая встроенные, например __class__, __dict__ и ваши собственные атрибуты, такие как name и phone.

Таким образом, если вам нужно исследовать объект и узнать, какие атрибуты он имеет, используйте dir(), а если хотите получить конкретные значения атрибутов, используйте __dict__.

0

Вы можете использовать dir(your_object), чтобы получить список атрибутов, и getattr(your_object, your_object_attr), чтобы получить значения этих атрибутов.

Пример использования:

for att in dir(your_object):
    print(att, getattr(your_object, att))
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь