Разбираемся с магическими методами в 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__
~хорошего изучения!
Перевод статьи Dipam Vasani: How to be fancy with OOP in Python
Комментарии