Марк Лутц, «Изучаем Python», часть VI, глава 30:
Класс Number предоставляет метод для перехвата создания экземпляра (__init__), а также метод для отлавливания выражений вычитания (__sub__ ). Специальные методы подобного рода являются привязками, которые дают возможность соединяться со встроенными операциями:
class Number:
def __init__(self, start): # Для Number (start)
self.data = start
def __sub__(self, other) : # Для экземпляр - other
return Number(self.data - other) # Результатом будет новый экземпляр
X = Number(5) # Number.__init__(X, 5)
Y = X - 2 # Number.__sub__ (X, 2)
Y.data # Y является новым экземпляром Number
Метод конструктора __init__ является наиболее употребительным методом перегрузки операций в Python; он присутствует в большинстве классов и применяется для инициализации вновь созданного объекта экземпляра с использованием любых аргументов, указываемых после имени класса. Метод __sub__ исполняет роль бинарной операции аналогично методу __add__, перехватывая выражения вычитания и возвращая в
качестве своего результата новый экземпляр класса (попутно выполняя __init__).
Post #4093
901
- ❤ 3