Middle
39
questionbank

Что такое рефлексия в контексте Python?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Возможность программы исследовать и модифицировать собственную структуру и поведение во время выполнения. Позволяет работать с объектами, типами, функциями и модулями, чьи имена или структуры неизвестны заранее до выполнения кода.

Основные возможности:

  • Получение информации о типе/объекте:
    • 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).