Магические методы (magic methods) в Python, также известные как dunder методы (от double underscore - двойное подчеркивание), помечаются двойным подчеркиванием в начале и конце имени (например, __init__
, __str__
). Они используются для реализации операторной перегрузки и настройки поведения объектов при взаимодействии со встроенными функциями и синтаксическими конструкциями Python.
Основные категории и примеры магических методов:
Инициализация и создание объектов:
__new__(cls, ...)
: Создает экземпляр класса. Вызывается до __init__
.__init__(self, ...)
: Инициализирует экземпляр класса после его создания.__del__(self)
: Деструктор. Вызывается при удалении объекта.Представление объектов:
__str__(self)
: Возвращает "неофициальное" строковое представление объекта, удобное для пользователей. Используется функциями str()
и print()
.__repr__(self)
: Возвращает "официальное" строковое представление объекта, однозначное и удобное для разработчиков (часто в виде кода, который может воссоздать объект). Используется функциями repr()
и при отображении объектов в интерактивной консоли.Атрибутный доступ:
__getattr__(self, name)
: Вызывается, когда попытка получить доступ к атрибуту name
, которого нет в объекте или его классах-предках.__setattr__(self, name, value)
: Вызывается при присваивании значения атрибуту name
.__delattr__(self, name)
: Вызывается при удалении атрибута name
.__getattribute__(self, name)
: Вызывается при каждой попытке доступа к атрибуту, независимо от того, существует ли он.Вызываемость объекта:
__call__(self, ...)
: Позволяет экземпляру класса вести себя как функция.Контейнерные протоколы:
__len__(self)
: Возвращает длину контейнера. Используется функцией len()
.__getitem__(self, key)
: Реализует доступ по индексу или ключу (например, obj[key]
).__setitem__(self, key, value)
: Реализует присваивание по индексу или ключу (например, obj[key] = value
).Магические методы (magic methods) в Python, также известные как dunder методы (от double underscore - двойное подчеркивание), помечаются двойным подчеркиванием в начале и конце имени (например, __init__
, __str__
). Они используются для реализации операторной перегрузки и настройки поведения объектов при взаимодействии со встроенными функциями и синтаксическими конструкциями Python.
Основные категории и примеры магических методов:
Инициализация и создание объектов:
__new__(cls, ...)
: Создает экземпляр класса. Вызывается до __init__
.__init__(self, ...)
: Инициализирует экземпляр класса после его создания.__del__(self)
: Деструктор. Вызывается при удалении объекта.Представление объектов:
__str__(self)
: Возвращает "неофициальное" строковое представление объекта, удобное для пользователей. Используется функциями str()
и print()
.__repr__(self)
: Возвращает "официальное" строковое представление объекта, однозначное и удобное для разработчиков (часто в виде кода, который может воссоздать объект). Используется функциями repr()
и при отображении объектов в интерактивной консоли.Атрибутный доступ:
__getattr__(self, name)
: Вызывается, когда попытка получить доступ к атрибуту name
, которого нет в объекте или его классах-предках.__setattr__(self, name, value)
: Вызывается при присваивании значения атрибуту name
.__delattr__(self, name)
: Вызывается при удалении атрибута name
.__getattribute__(self, name)
: Вызывается при каждой попытке доступа к атрибуту, независимо от того, существует ли он.Вызываемость объекта:
__call__(self, ...)
: Позволяет экземпляру класса вести себя как функция.Контейнерные протоколы:
__len__(self)
: Возвращает длину контейнера. Используется функцией len()
.__getitem__(self, key)
: Реализует доступ по индексу или ключу (например, obj[key]
).__setitem__(self, key, value)
: Реализует присваивание по индексу или ключу (например, obj[key] = value
).Зарегистрируйтесь или войдите, чтобы получить доступ к полным ответам на все вопросы из банка вопросов.