Как уже упоминалось в других ответах, вы действительно можете перегрузить операторы (определив специальные методы в классе, который вы пишете, то есть методы, имена которых начинаются и заканчиваются двумя символами подчеркивания). Все подробности находятся здесь.
Чтобы завершить ответы на ваши вопросы: вы не можете определять новые операторы; но <<
не новый оператор, это уже существующий, и он перегружен путем определения в классе метода _ 2_.
В качестве исторической заметки, это также в значительной степени ситуация в C ++, но точный набор операторов, которые вы можете перегрузить, различается между двумя языками. Например, в C ++ нельзя перегрузить доступ к атрибутам, .
; в Python вы можете использовать __getattr__
(или __getattribute__
, с другой семантикой) и __setattr__
. И наоборот, в Python =
(простое присвоение) не является оператором, поэтому вы не можете его перегрузить, тогда как в C ++ это оператор, и вы можете его перегрузить.
<<
является оператором и может быть перегружен на обоих языках - вот как <<
и >>
, не теряя первоначального смысла сдвига влево и вправо, также стали операторами форматирования ввода-вывода в C ++ (не в Python! -).
person
Alex Martelli
schedule
20.12.2009