TGTGInsighttelegram intelligenceLIVE / telegram public index
← Python Заметки
Python Заметки avatar

TGINSIGHT POST

Post #99

@pythonotes

Python Заметки

Прегледи592Број на прегледи
Објавено12 јун.12.06.2020 г., 09:00
Содржина

Содржина на објавата

Расширенный вариант каунтера из прошлого примера. Оказалось ему есть куда еще развиваться и без унарных операторов))). Добавим обработку бинарных операторов "+" и "-". Сделаем возможность прибавлять к канутеру любое число обычным синтаксисом def __add__(self, other): self.val += int(other) def __sub__(self, other): self.val += int(other) Теперь можно делать так: >>> c = Counter(3) >>> c + 2 >>> print(c) Count: 5 Добавим обработку для случая когда наш каунтер справа def __radd__(self, other): self.__add__(other) def __rsub__(self, other): self.__sub__(other) >>> c = Counter(3) >>> 2 + с >>> print(c) Count: 5 Добавим во все методы возвращаемое значение и будем возвращать self: def __pos__(self, *args): self.val += 1 return self def __neg__(self): self.val -= 1 return self ... Тоже самое в остальных. Теперь такой синтаксис тоже допустим (и тоже антипаттерн!): >>> c = Counter() >>> print(c) Count: 0 >>> ++c Count: 2 >>> ++++c Count: 6 >>> ---c Count: 3 А так же теперь доступен такой вариант >>> c += 2 Count: 5 Следующие три записи идентичны по результату с += 2 с + 2 ++c Во всех случаях каунтер с увеличится на 2 Еще раз о главном! Все эти операции изменяют один из операндов, что не принято в Python. Так что дальше эксперементов не стоит уходить. Класс требует доработки чтобы не конфликтовать с принятыми нормами. 🌎Ссылка на полный листинг __________________________ PS. Если инкремент изменить на 0.5, то у нас получится синтаксис весьма похожий на C. То есть, чтобы прибавить 1 надо будет написать ++x 😎, но это совсем уже будет вне всяких приличий 🥴 #tricks