Какие магические методы в 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