Skip to content

Commit 7e69530

Browse files
committed
feat: add magic_methods page
1 parent d4aae7c commit 7e69530

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

docs/python/magic_methods.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
## Определение
2+
3+
!!! info ""
4+
**Магические методы** (Magic methods) - это специальные методы в Python, которые начинаются и заканчиваются двойным подчёркиванием (например,` __init__`). Они также называются `dunder‑методами` (от англ. double underscore).
5+
6+
## Зачем нужны
7+
8+
<span class="badge">Dunder methods</span> (Магические методы) позволяют вашим собственным классам вести себя так же, как встроенные типы данных.
9+
10+
С их помощью можно перегружать операторы (сложение, вычитание), настраивать строковое представление объекта, определять логику сравнения или превращать объект в итерируемую коллекцию.
11+
12+
По сути, они позволяют глубоко интегрировать пользовательские объекты в экосистему Python, делая код более элегантным и интуитивно понятным.
13+
14+
## Основные категории
15+
16+
Магические методы охватывают практически все аспекты поведения объектов.
17+
18+
| Категория | Методы | Когда вызываются |
19+
|----------------|--------------------------------------|----------------------------------------------------------|
20+
| Жизненный цикл | `__new__`, `__init__`, `__del__` | Создание, инициализация и удаление объекта |
21+
| Представление | `__str__`, `__repr__` | Преобразование в строку (для пользователя и для отладки) |
22+
| Математика | `__add__`, `__sub__`, `__mul__` | Арифметические операции (+, -, *) |
23+
| Сравнение | `__eq__`, `__lt__`, `__gt__` | Сравнение объектов (==, <, >) |
24+
| Контейнеры | `__len__`, `__getitem__`, `__iter__` | Работа с длиной, индексами и циклами |
25+
26+
## Пример использования
27+
28+
Реализуем класс `Vector`, который умеет складываться с другим вектором через стандартный плюс.
29+
```python
30+
class Vector:
31+
def __init__(self, x, y):
32+
self.x = x
33+
self.y = y
34+
35+
# Перегрузка оператора +
36+
def __add__(self, other):
37+
return Vector(self.x + other.x, self.y + other.y)
38+
39+
# Красивый вывод при print()
40+
def __str__(self):
41+
return f"Vector({self.x}, {self.y})"
42+
43+
v1 = Vector(1, 2)
44+
v2 = Vector(3, 4)
45+
v3 = v1 + v2
46+
print(v3) # Выведет: Vector(4, 6)
47+
```
48+
49+
## Ключевые мысли
50+
51+
- <span class="badge">Магические методы</span> вызываются интерпретатором автоматически «под капотом» при выполнении соответствующих операций.
52+
- Никогда не вызывайте `dunder‑методы` напрямую (кроме редких случаев), используйте встроенные функции, такие как `str(obj)`, `len(obj)` или операторы.
53+
- Реализация этих методов делает ваш API более согласованным с остальным кодом на Python, следуя принципу <span class="badge">«меньшего удивления»</span>.

0 commit comments

Comments
 (0)