Основные магические методы в python
Пора в python изучить magic и создать классы с магическими методами. С вводной частью вы можете ознакомиться ЗДЕСЬ.
В прошлом посте мы разобрались с методами __new__ и __init__.
Далее разберемся с методом __del__.
__del__ - метод, который срабатывает при удалении объекта.
Когда мы вызываем удаление man_1, то нам выводится на экран сообщение и имя человека удаляется, если мы попробуем, после удаление, вывести имя в консоль, то получим ошибку.
Также есть базовые методы, такие как ==, !=, >= и т.д.
__eq__(self, other) - Определяет поведение оператора равенства, ==.
__ne__(self, other) - Определяет поведение оператора неравенства, !=.
__lt__(self, other) - Определяет поведение оператора меньше, <.
__gt__(self, other) - Определяет поведение оператора больше, >.
__le__(self, other) - Определяет поведение оператора меньше или равно, <=.
__ge__(self, other) - Определяет поведение оператора больше или равно, >=.
Напишем класс Number, который будет принимать число и напишем два метода __eq__ и __gt__ для сравнения.
В Python есть унарные операторы.
__pos__(self) - Определяет поведение для унарного плюса (+some_object)
__neg__(self) - Определяет поведение для отрицания(-some_object)
__abs__(self) - Определяет поведение для встроенной функции abs().
__invert__(self) - Определяет поведение для инвертирования оператором ~. Для объяснения что он делает смотри статью в Википедии о бинарных операторах.
__round__(self, n) - Определяет поведение для встроенной функции round(). n это число знаков после запятой, до которого округлить.
__floor__(self) - Определяет поведение для math.floor(), то есть, округления до ближайшего меньшего целого.
__ceil__(self) - Определяет поведение для math.ceil(), то есть, округления до ближайшего большего целого.
__trunc__(self) - Определяет поведение для math.trunc(), то есть, обрезания до целого.
Также есть обычные арифметические операторы, +, - ит
__add__(self, other) - Сложение.
__sub__(self, other) - Вычитание.
__mul__(self, other) - Умножение.
__floordiv__(self, other) - Целочисленное деление, оператор //.
__div__(self, other) - Деление, оператор /.
__truediv__(self, other) - Правильное деление. Заметьте, что это работает только когда используется from __future__ import division.
__mod__(self, other) - Остаток от деления, оператор %.
__divmod__(self, other) - Определяет поведение для встроенной функции divmod().
__pow__ - Возведение в степень, оператор **.
__lshift__(self, other) - Двоичный сдвиг влево, оператор <<.
__rshift__(self, other) - Двоичный сдвиг вправо, оператор >>.
__and__(self, other) - Двоичное И, оператор &.
__or__(self, other) - Двоичное ИЛИ, оператор |.
__xor__(self, other) - Двоичный xor, оператор ^.
Операторы сложение, вычитание и деление будут выглядеть примерно так:
Есть также деление, умножение, сложение и т.д. с присваиванием.
__iadd__(self, other) - Сложение с присваиванием.
__isub__(self, other) - Вычитание с присваиванием.
__imul__(self, other) - Умножение с присваиванием.
__ifloordiv__(self, other) - Целочисленное деление с присваиванием, оператор //=.
__idiv__(self, other) - Деление с присваиванием, оператор /=.
__itruediv__(self, other) - Правильное деление с присваиванием. Заметьте, что работает только если используется from __future__ import division.
__imod_(self, other) - Остаток от деления с присваиванием, оператор %=.
__ipow__ - Возведение в степерь с присваиванием, оператор **=.
__ilshift__(self, other) - Двоичный сдвиг влево с присваиванием, оператор <<=.
__irshift__(self, other) - Двоичный сдвиг вправо с присваиванием, оператор >>=.
__iand__(self, other) - Двоичное И с присваиванием, оператор &=.
__ior__(self, other) - Двоичное ИЛИ с присваиванием, оператор |=.
__ixor__(self, other) - Двоичный xor с присваиванием, оператор ^=.
Можно написать класс Point, принимающий имя точки, координаты по x и y, и при обращение к нему выводит информацию о себе, также пару методов, которые показывали бы координаты точек.
Весь код, написанный с вами будет ЗДЕСЬ.