В Python есть несколько способов получить список атрибутов объекта. Рассмотрим основные методы:
Самый простой способ - использовать встроенную функцию dir()
, которая возвращает список всех атрибутов и методов объекта, включая унаследованные.
Пример:
class MyClass:
def __init__(self):
self.x = 10
self.y = 20
obj = MyClass()
print(dir(obj)) # Выведет все атрибуты, включая x, y и служебные методы
Плюсы:
Минусы:
Большинство объектов в Python имеют атрибут __dict__
, который содержит пространство имен объекта в виде словаря.
Пример:
print(obj.__dict__) # Выведет: {'x': 10, 'y': 20}
Плюсы:
Минусы:
__slots__
Аналог обращения к __dict__
, но в виде функции. Для простых объектов возвращает то же самое, что и __dict__
.
Пример:
print(vars(obj)) # Аналогично obj.__dict__
Для проверки и получения конкретных атрибутов можно использовать эту комбинацию.
Пример:
attributes = [attr for attr in dir(obj) if not attr.startswith('__')]
print(attributes) # Выведет только пользовательские атрибуты
Для более продвинутого интроспективного анализа можно использовать модуль inspect
.
Пример:
import inspect
# Получаем только атрибуты-данные
attrs = inspect.getmembers(obj, lambda a: not inspect.ismethod(a))
print(attrs)
Метод | Пользовательские атрибуты | Методы | Встроенные атрибуты | Значения |
---|---|---|---|---|
dir() | Да | Да | Да | Нет |
__dict__ | Да | Нет | Нет | Да |
vars() | Да | Нет | Нет | Да |
inspect | Настраиваемо | Да | Настраиваемо | Да |
Выбор метода зависит от ваших потребностей:
dir()
__dict__
или vars()
inspect
hasattr()
/getattr()