January 9, 2020

Магические методы

В начале 2020 года начнем с темы магических методов или Dunder методы. С помощью этих магических методов мы можем переопределять кое-какое поведение.

Давайте сразу приступим к примерам:

У нас есть некая точка (Point), которая имеет координаты х и у. И вот в принципе __init__ это один из Dunder методов. Но он специализированный и предназначается для конструирования класса. Если мы создадим сначала Point и выведем его через print, то получим вот такой вывод:

А что, если мы хотим получить более красивый вывод, а не такую непонятную штуку? Мы можем переопределить Dunder метод __str__, который определяет строковое представление экземпляра класса:

Вуаля, у нас получился осмысленный ответ благодаря переопределнию __str__.

Попробуем создать новый класс:

Мы переназначили __len__, __str__ и __del__, а теперь посмотрим, как они вызываются, и что нам в итоге выведут, то ли, что мы хотели?

Вот, мы получили то, что хотели.

В итоге, если мы хотим переопределить поведение определенных функций, то мы можем переопределить их с помощью такого синтаксиса. Просто используя знакомый нам синтаксис, который мы видели уже неоднократно :) На самом деле этих методов еще больше, и все их не охватить, поэтому можете изучить их в документакции по Python.