четверг, 30 июля 2015 г.

Общие методы перегрузки операторов

Наиболее часто используемые методы перегрузки операторов.


Метод Перегружает Вызывается
__init__ Конструктор При создании объекта:
x = Class(args)
__del__ Деструктор При уничтожении объекта
__add__ Оператор +
x + y
если отсутствует метод __iadd__:
x += y
__or__ Оператор | (побитовое или)
x | y
если отсутствует метод __ior__
x |= y
__repr__, __str__ Вывод, преобразование
print(x)
repr(x)
str(x)
__call__ Вызов функции
x(*pargs, **kwargs)
__getattr__ Обращение к несуществующему атрибуту
x.undefined
__setattr__ Присваивание атрибуту
x.any = value
__delattr__ Удаление атрибута
del x.any
__getattribute__ Обращение к атрибуту
x.any
__getitem__ Доступ к элементу по индексу, извлечение среза, итерация
x[key]
x[i:j]
циклы for и другие конструкции итерации, при отсутствии метода __iter__
__setitem__ Присваивание элементу по индексу или срезу
x[key] = value
x[i:j] = sequence
__delitem__ Удаление элемента по индексу или среза
del x[key]
del x[i:j]
__len__ Длина
len(x)
проверка истинности, если отсутствует метод __bool__
__bool__ Проверка логического значения
bool(x)
__lt__, __gt__,
__le__, __ge__,
__eq__, __ne__,
Сравнивание
x < y
x > y
x <= y
x >= y
x == y
x != y
__radd__ Правосторонний оператор +
не_экземпляр + x
__iadd__ Добавление
x += y
в ином случае (__add__)
__iter__, __next__ Итерационный контекст
i = iter(x)
next(i)
циклы for, оператор in (если не определен метод __contains__), все типы генераторов, map(f, x) и другие
__contains__ Проверка на вхождение
item in x
__index__ Целое число
hex(x)
bin(x)
oct(x)
o[x]
o[x:]
__enter__, __exit__ Менеджеры контекстов
with obj as var:
__get__, __set__, __delete__ Дескрипторы атрибутов
x.attr
x.attr = value
del x.attr
__new__ Создание Вызывается при создании объектов, перед вызовом метода __init__
Источник: Лутц М. Изучаем Python, 4-е издание. — Пер. с англ. — СПб.: Символ-Плюс, 2011, стр. 795-797.