BOOKPYTHON Telegram 3723
В Python нет оператора ++, вместо него используется x += 1. Однако синтаксис ++x всё ещё допустим (в отличие от x++, который вызывает ошибку).

Суть в том, что в Python есть унарный плюс, и выражение ++x на самом деле интерпретируется как x.__pos__().__pos__(). Этим можно злоупотребить и заставить ++ работать как инкремент (хотя так делать не рекомендуется):


class Number:
def __init__(self, value):
self._value = value

def __pos__(self):
return self._Incrementer(self)

def inc(self):
self._value += 1

def __str__(self):
return str(self._value)

class _Incrementer:
def __init__(self, number):
self._number = number

def __pos__(self):
self._number.inc()


x = Number(4)
print(x) # 4
++x
print(x) # 5


Здесь ++x вызывает дважды __pos__(): сначала на x, затем на возвращённом объекте _Incrementer, в котором второй __pos__() вызывает inc(), увеличивая значение.

👉@BookPython
👍3🌚21



tgoop.com/BookPython/3723
Create:
Last Update:

В Python нет оператора ++, вместо него используется x += 1. Однако синтаксис ++x всё ещё допустим (в отличие от x++, который вызывает ошибку).

Суть в том, что в Python есть унарный плюс, и выражение ++x на самом деле интерпретируется как x.__pos__().__pos__(). Этим можно злоупотребить и заставить ++ работать как инкремент (хотя так делать не рекомендуется):


class Number:
def __init__(self, value):
self._value = value

def __pos__(self):
return self._Incrementer(self)

def inc(self):
self._value += 1

def __str__(self):
return str(self._value)

class _Incrementer:
def __init__(self, number):
self._number = number

def __pos__(self):
self._number.inc()


x = Number(4)
print(x) # 4
++x
print(x) # 5


Здесь ++x вызывает дважды __pos__(): сначала на x, затем на возвращённом объекте _Incrementer, в котором второй __pos__() вызывает inc(), увеличивая значение.

👉@BookPython

BY Библиотека Python разработчика | Книги по питону


Share with your friend now:
tgoop.com/BookPython/3723

View MORE
Open in Telegram


Telegram News

Date: |

Content is editable within two days of publishing With Bitcoin down 30% in the past week, some crypto traders have taken to Telegram to “voice” their feelings. “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group. Public channels are public to the internet, regardless of whether or not they are subscribed. A public channel is displayed in search results and has a short address (link).
from us


Telegram Библиотека Python разработчика | Книги по питону
FROM American