Разбираемся с магическими методами в Python, облегчающими жизнь с ООП. Вам понравится!
Что за магические методы?
Магические методы — это специальные методы в python, обрамленные двумя нижними подчеркиваниями. Они также известны как dunder методы. Многое из того, что мы делаем в Python, делается с использованием dunder методов. Посмотрите на примеры ниже:

Мы внедрим эти методы в наши классы, чтобы сделать их интуитивно понятными. Давайте разбираться как.
1. __init__()
Первый магический метод — это метод init. Он используется в качестве конструктора для классов в Python.

2. __str__()
При создании объектов классов очень хотелось бы видеть, что у них внутри, в легко читаемом для человека представлении. И здесь пригождается str:

Существует другой метод — __repr__() — который используется для возврата состояния объекта как он есть, но в данной статье мы пропустим этот метод.
3. __len__()
Теперь, предположим, у нас есть класс School, который хранит детальную информацию о студентах. И вот простой способ посчитать количество студентов в School.

4. __getitem__()
Нам также нужен простой способ получить доступ к записям о конкретном студенте:

5. __setitem__()
…и возможность редактировать их.

6. __getattr__() and __setattr__()
Эти методы доступны в Python автоматически при создании класса, чтобы получать и задавать его атрибуты, следовательно нам не нужно их определять. Однако мы можем сделать это, если захотим изменить их поведение.
Например, можно изменить поведение __setattr__() для сохранения атрибута в списке, когда бы он ни был задан, чтобы легко получить доступ ко всем атрибутам.

7. __iter__()
Мы можем создать итератор, используя метод __iter__(). Затем мы можем использовать его для доступа к данным каждого студента.

8. __add__() и другие математические методы
Предположим, у нас есть класс Cost
.

Имеет смысл осуществлять математические операции с этими объектами — это сделает наш код интуитивно понятнее и элегантнее.

Заключение
Здесь я перечислил лишь некоторые простые магические методы. Если вам интересно узнать больше, ниже список методов, которые вы можете изучить:
__new__
__del__
__enter__
__exit__
~хорошего изучения!
Читайте также:
- Получаем данные Open Street Map в Python
- Пишем интерфейсы командной строки в Python как профи
- Строим конвейеры с Pandas, используя «pdpipe»
Перевод статьи Dipam Vasani: How to be fancy with OOP in Python