Ответ
Интроспекция в Python — это возможность программы исследовать тип, свойства, методы и другие характеристики объекта во время выполнения. Это позволяет динамически получать информацию об объектах и даже модифицировать их, что является мощным инструментом для создания гибких и адаптивных систем.
Почему это полезно:
- Отладка и логирование: Получение информации о состоянии объектов и вызовах функций.
- Сериализация/десериализация: Динамическое преобразование объектов в другие форматы (JSON, YAML) и обратно.
- Создание гибких API и фреймворков: Автоматическая генерация документации, маршрутизации или валидации на основе метаданных объектов.
- Метапрограммирование: Динамическое создание или изменение кода.
Примеры использования:
# 1. Проверка типа объекта
x = 42
print(type(x)) # <class 'int'>
print(isinstance(x, int)) # True
# 2. Получение атрибутов объекта
class MyClass:
def __init__(self, value):
self.value = value
def greet(self):
return "Hello"
obj = MyClass(10)
print(dir(obj)) # Список всех атрибутов и методов
print(hasattr(obj, 'value')) # True
print(getattr(obj, 'value')) # 10
setattr(obj, 'new_attr', 'test') # Динамическое добавление атрибута
print(obj.new_attr) # test
# 3. Интроспекция модуля
import math
print(dir(math)) # Все функции, переменные и классы модуля math
# 4. Доступ к словарю атрибутов
print(obj.__dict__) # {'value': 10, 'new_attr': 'test'}
Основные инструменты интроспекции в Python:
type(),isinstance(): Для проверки типа объекта.dir(): Возвращает список атрибутов и методов объекта.hasattr(),getattr(),setattr(),delattr(): Для проверки наличия, получения, установки и удаления атрибутов по имени.- Модуль
inspect: Предоставляет более мощные средства для получения информации о функциях, классах, модулях и фреймах стека. __dict__: Специальный атрибут, содержащий словарь атрибутов объекта (для большинства объектов).