Какие магические методы и для чего используются

Магическими метода называют методы, имена которых начинаются и заканчиваются двойным подчеркиванием. Магические они потому, что почти никогда не вызываются явно. Их вызывают встроенные функции или синтаксические конструкции. Например, функция len() вызывает метод __len__() переданного объекта. Метод __add__(self, other) вызывается автоматически при сложении оператором +.

Перечислим некоторые магические методы:

  • __init__: инициализатор класса
  • __add__: сложение с другим объектом
  • __eq__: проверка на равенство с другим объектом
  • __iter__: возвращает итератор

Oct. 10, 2023, Источник

  • Конструкторы / Деконструкторы
    • new, init, del
  • Методы сравнения
    • eq, ne, lt
  • Числовые
    • Унарные операторы: ********abs, round (округление)
    • Обычные арифметические операторы: add, sub(вычитание)
    • Составное присваивание: iadd(x += 1), isub (x -= 1)
  • Представление своих классов
    • str, repr, hash
  • Контроль доступа к атрибутам
    • getattr, setattr, delatter
  • Для контейнеров
    • len, iter, next
  • Менеджеры контекста
    • enter exit
  • Вызываемый метод call

Oct. 10, 2023, Источник

Магические методы (иногда также называемые специальными методами) начинаются и заканчиваются двумя подчеркиваниями (например, `__init__()`). Они позволяют определить различное поведение для объектов, таких как перегрузка операторов, создание контекстных менеджеров, управление атрибутами и т. д. Вот несколько примеров наиболее часто используемых методов и их назначения:

1. `__init__(self, ...)`: Вызывается при создании нового экземпляра класса и используется для инициализации его атрибутов.

2. `__repr__(self)`: Возвращает "официальное" строковое представление объекта. Это используется для отладки и для получения строкового представления объекта при выводе в интерактивной оболочке.

3. `__str__(self)`: Возвращает "неформальное" строковое представление объекта. Обычно используется для представления объекта в удобочитаемой форме для конечного пользователя.

4. `__len__(self)`: Возвращает длину объекта. Это используется, когда объект поддерживает операцию получения длины, например, для строк, списков и т. д.

5. `__getitem__(self, key)`: Позволяет объекту поддерживать доступ к элементам по индексу, как это делают списки и словари.

6. `__setitem__(self, key, value)`: Позволяет объекту устанавливать значение элемента по ключу.

7. `__delitem__(self, key)`: Позволяет объекту удалять элемент по ключу.

8. `__iter__(self)`: Возвращает итератор для объекта, позволяя его использовать в циклах `for`.

9. `__next__(self)`: Вызывается итератором для получения следующего элемента в последовательности.

10. `__enter__(self)`, `__exit__(self, exc_type, exc_value, traceback)`: Позволяют объекту быть контекстным менеджером, что позволяет определять действия, которые должны выполняться при входе и выходе из контекста.

Это лишь несколько примеров магических методов, которые можно определить. Они предоставляют мощные средства для определения поведения объектов и делают Python гибким и выразительным.

Feb. 17, 2024, easyoffer