Список магических методов

Магические методы - это те методы, которые вызываются при перегрузке различных операторов.

В этой "шпаргалке" пойдёт список таких "магических" методов.

__new__(cls[, ...]) — управляет созданием экземпляра. В качестве обязательного аргумента принимает класс (не путать с экземпляром). Должен возвращать экземпляр класса для его последующей его передачи методу __init__

__init__(self[, ...]) — конструктор класса

__del__(self) — вызывается при удалении объекта сборщиком мусора

__repr__(self) — вызывается встроенной функцией repr; возвращает "сырые" данные, использующиеся для внутреннего представления в Python

__str__(self) — вызывается функциями str, print, .format. Возвращает строковое представление объекта

__bytes__(self) — вызывается функцией bytes при преобразовании к байтам

__format__(self, format_spec) — используется методом .format у строк

__lt__(self, other) — x < y вызывает x.__lt__(y)

__le__(self, other) — x ≤ y вызывает x.__le__(y)

__eq__(self, other) — x == y вызывает x.__eq__(y)

__ne__(self, other) — x != y вызывает x.__ne__(y)

__gt__(self, other) — x > y вызывает x.__gt__(y)

__ge__(self, other) — x ≥ y вызывает x.__ge__(y)

__hash__(self) — получение хеш-суммы объекта, например, для добавления в словарь

__bool__(self) — вызывается при проверке истинности. Если этот метод не определён, вызывается метод __len__ (объекты, имеющие ненулевую длину, считаются истинными)

__getattr__(self, name) — вызывается, когда атрибут экземпляра класса не найден в обычных местах (например, у экземпляра нет метода с таким названием)

__setattr__(self, name, value) — запись значения value в атрибут name

__delattr__(self, name) — удаление атрибута (del obj.name)

__call__(self[, *args[, **kwargs]]) — вызов экземпляра класса как функции

__len__(self) — длина объекта

__getitem__(self, key) — доступ по индексу (или ключу)

__setitem__(self, key, value) — назначение элемента по индексу

__delitem__(self, key) — удаление элемента по индексу

__iter__(self) — возвращает итератор для контейнера

__next__(self) — возвращает следующий элемент итератора

__reversed__(self) — итератор из элементов, следующих в обратном порядке

__contains__(self, item) — проверка на принадлежность элемента контейнеру item in self

__neg__(self) — унарный минус

__pos__(self) — унарный плюс

__abs__(self) — модуль (abs())

__invert__(self) — инверсия (~)

__complex__(self) — приведение к complex

__int__(self) — приведение к int

__float__(self) — приведение к float

__round__(self[, n]) — округление

__enter__(self)

__exit__(self, exc_type, exc_value, traceback) — реализация менеджеров контекста

__await__(self) — используется для await в асинхронном коде

__aiter__(self) — возвращает асинхронный итератор для контейнера

__anext__(self) — возвращает следующий элемент асинхронного итератора

Перегрузка арифметических операторов

__add__(self, other) — сложение. x + y вызывает x.__add__(y)

__sub__(self, other) — вычитание x - y

__mul__(self, other) — умножение x * y

__matmul__(self, other) — матричное умножение x @ y

__truediv__(self, other) — деление x / y

__floordiv__(self, other) — целочисленное деление x // y

__mod__(self, other) — остаток от деления x % y

__divmod__(self, other) — частное и остаток divmod(x, y)

__pow__(self, other[, modulo]) — возведение в степень x ** y, pow(x, y[, modulo])

__lshift__(self, other) — битовый сдвиг влево x << y

__rshift__(self, other) — битовый сдвиг вправо x >> y

__and__(self, other) — битовое И x & y

__xor__(self, other) — битовое ИСКЛЮЧАЮЩЕЕ ИЛИ x ^ y

__or__(self, other) — битовое ИЛИ x | y

Перегрузка арифметических операторов справа

__radd__(self, other)

__rsub__(self, other)

__rmul__(self, other)

__rmatmul__(self, other)

__rtruediv__(self, other)

__rfloordiv__(self, other)

__rmod__(self, other)

__rdivmod__(self, other)

__rpow__(self, other)

__rlshift__(self, other)

__rrshift__(self, other)

__rand__(self, other)

__rxor__(self, other)

__ror__(self, other) — делают то же самое, что и арифметические операторы, перечисленные выше, но для аргументов, находящихся справа, и только в случае, если для левого операнда не определён соответствующий метод

Например, операция x + y будет сначала пытаться вызвать x.__add__(y), и только в том случае, если это не получилось, будет пытаться вызвать y.__radd__(x). Аналогично для остальных методов.

Перегрузка арифметических операторов, совмещённых с присваиванием

__iadd__(self, other) — +=

__isub__(self, other) — -=

__imul__(self, other) — *=

__imatmul__(self, other) — @=

__itruediv__(self, other) — /=

__ifloordiv__(self, other) — //=

__imod__(self, other) — %=

__ipow__(self, other[, modulo]) — **=

__ilshift__(self, other) — <<=

__irshift__(self, other) — >>=

__iand__(self, other) — &=

__ixor__(self, other) — ^=

__ior__(self, other) — |=