Как в Python посмотреть атрибуты объекта

«Как в Python посмотреть атрибуты объекта» — вопрос из категории ООП, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. dir(obj) — полный список атрибутов

Возвращает отсортированный список имен всех атрибутов объекта, включая унаследованные от родительских классов и служебные (например, __init__). Полезно для общего обзора всех доступных методов и полей.

class MyClass:
    class_var = 10
    def __init__(self):
        self.instance_var = 20

obj = MyClass()
print(dir(obj))
# Выведет ['__class__', ..., 'class_var', 'instance_var']

2. vars(obj) или obj.__dict__ — атрибуты экземпляра

Возвращают словарь __dict__, содержащий только атрибуты, принадлежащие конкретному экземпляру объекта (его состояние). Это не включает атрибуты класса или унаследованные.

# Продолжение предыдущего примера
print(vars(obj))
# Выведет: {'instance_var': 20}

print(obj.__dict__)
# Выведет: {'instance_var': 20}

3. getattr(obj, 'attribute_name') — доступ по имени

Получает значение атрибута по его имени, переданному в виде строки. Незаменимо, когда имя атрибута определяется динамически в ходе выполнения программы.

attr_name = 'instance_var'
print(getattr(obj, attr_name)) # 20

Ключевые отличия:

  • dir(): для исследования всех доступных имен в объекте.
  • vars() / __dict__: для получения словаря с атрибутами только этого экземпляра.
  • getattr(): для динамического доступа к значению конкретного атрибута по строковому имени.