Какие магические методы в python знаешь

Магические методы , также известные как специальные методы, — это встроенные методы с двойными подчеркиваниями в начале и в конце имен (например, `__init__`, `__str__`), которые позволяют вам определять поведение ваших классов для различных операций. Эти методы обеспечивают способ использовать встроенные функции Python (как `len`, `print`, операторы `+`, `-`, `==` и т. д.) с объектами пользовательских классов.

Вот несколько их категорий:

1. Методы инициализации и представления

  • `__init__(self, ...)`: Инициализация нового объекта.
  • `__del__(self)`: Деструктор, который вызывается при удалении объекта.
  • `__str__(self)`: Определяет поведение функции `str()`, вызванной для экземпляра вашего класса.
  • `__repr__(self)`: Определяет поведение функции `repr()`. Должен возвращать строку, которая могла бы быть использована для воссоздания объекта.

2. Методы, связанные с операциями сравнения

  • `__eq__(self, other)`: Определяет поведение оператора равенства `==`.
  • `__ne__(self, other)`: Определяет поведение оператора неравенства `!=`.
  • `__lt__(self, other)`: Меньше `<`.
  • `__gt__(self, other)`: Больше `>`.
  • `__le__(self, other)`: Меньше или равно `<=`.
  • `__ge__(self, other)`: Больше или равно `>=`.

3. Методы арифметических операций

  • `__add__(self, other)`: Сложение `+`.
  • `__sub__(self, other)`: Вычитание `-`.
  • `__mul__(self, other)`: Умножение `*`.
  • `__truediv__(self, other)`: Деление `/`.
  • `__floordiv__(self, other)`: Целочисленное деление `//`.
  • `__mod__(self, other)`: Остаток от деления `%`.
  • `__pow__(self, other[, modulo])`: Возведение в степень `**`.

4. Методы для работы с контейнерами

  • `__len__(self)`: Определяет поведение функции `len()`.
  • `__getitem__(self, key)`: Для доступа по индексу или ключу (например, для списков или словарей).
  • `__setitem__(self, key, value)`: Назначение значения по индексу или ключу.
  • `__delitem__(self, key)`: Удаление элемента по индексу или ключу.
  • `__iter__(self)`: Возвращает итератор для контейнера.
  • `__contains__(self, item)`: Проверка на вхождение элемента, реализует оператор `in`.

5. Прочие магические методы

  • `__call__(self, *args, **kwargs)`: Позволяет объекту класса вести себя как функция.
  • `__enter__(self)`, `__exit__(self, exc_type, exc_value, traceback)`: Методы для реализации менеджеров контекста с `with`.

Пример:

```python
class Book:
    def __init__(self, title, author):
        self.title = title
        self.author = author

    def __str__(self):
        return f"{self.title} by {self.author}"

    def __repr__(self):
        return f'Book("{self.title}", "{self.author}")'

    def __eq__(self, other):
        return self.title == other.title and self.author == other.author

# Создание и использование объектов класса Book
book1 = Book("War and

 Peace", "Leo Tolstoy")
book2 = Book("Anna Karenina", "Leo Tolstoy")

print(book1)  # вызывает __str__
repr(book1)  # вызывает __repr__
book1 == book2  # вызывает __eq__, возвращает False
```

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

April 14, 2024, easyoffer