Возможность программы исследовать и модифицировать собственную структуру и поведение во время выполнения. Позволяет работать с объектами, типами, функциями и модулями, чьи имена или структуры неизвестны заранее до выполнения кода.
Основные возможности:
type() - получить тип объекта.isinstance() - проверить, является ли объект экземпляром класса или подклассом.issubclass() - проверить, является ли один класс подклассом другого.getattr(obj, name[, default]) - получить значение атрибута.setattr(obj, name, value) - установить значение атрибута.hasattr(obj, name) - проверить наличие атрибута.delattr(obj, name) - удалить атрибут.help() - интерактивная справка.__doc__ - доступ к docstring объекта.eval(expression[, globals[, locals]]) - выполняет строку как выражение Python.exec(object[, globals[, locals]]) - выполняет строку или объект кода.dir([object]) - список имен в текущем пространстве имен или атрибутов объекта.globals() - словарь глобальных переменных текущего модуля.locals() - словарь локальных переменных текущей функции или модуля.Примеры использования:
python
Таблица основных функций рефлексии:
| Функция | Описание |
|---|---|
type() | Получить тип объекта |
isinstance() | Проверить экземпляр |
issubclass() | Проверить подкласс |
getattr() | Получить атрибут |
setattr() | Установить атрибут |
hasattr() | Проверить наличие атрибута |
delattr() | Удалить атрибут |
help() | Интерактивная справка |
__doc__ | Доступ к docstring |
eval() | Выполнить строку как выражение |
exec() | Выполнить строку или объект кода |
dir() | Список имен в пространстве имен или атрибутов |
globals() | Словарь глобальных переменных |
locals() | Словарь локальных переменных |
Используется в метапрограммировании, отладке, сериализации/десериализации, плагинной архитектуре. Следует использовать осторожно, так как может усложнить понимание кода и потенциально создать проблемы безопасности (eval/exec).