В 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()inspecthasattr()/getattr()