TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #99 593
Расширенный вариант каунтера из прошлого примера. Оказалось ему есть куда еще развиваться и без унарных операторов))). Добавим обработку бинарных операторов "+" и "-".

Сделаем возможность прибавлять к канутеру любое число обычным синтаксисом

    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
Gist cpp-style-increment-counter.py GitHub Gist: instantly share code, notes, and snippets.
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →