Можно ли перегрузить операторы ++ в Python? - PullRequest
0 голосов
/ 22 апреля 2009

Возможно ли перегрузить операторы ++ в Python?

Ответы [ 5 ]

18 голосов
/ 22 апреля 2009

В Python нет оператора ++ (ни '-'). Инкремент обычно выполняется с помощью оператора +=.

16 голосов
/ 22 апреля 2009

Нет, перегрузить унарный оператор ++ невозможно, потому что он вообще не является оператором в Python.

Только (подмножество) операторов, которые разрешены синтаксисом Python (те операторы, которые уже имеют одно или несколько применений в языке), могут быть перегружены.

Эти являются действительными операторами Python, а на этой странице перечислены методы, которые вы можете определить для их перегрузки (те, которые имеют два начальных и конечных подчеркивания).

Вместо i ++, который обычно используется в других языках, в Python пишется i + = 1.

В питоне знак + нуждается в операнде справа от него. Он может также иметь операнд слева от него, и в этом случае он будет интерпретироваться как двоичный, а не унарный оператор. +5, ++ 5, ..., ++++++ 5 - все допустимые выражения Python (все оцениваются до 5), как и 7 + 5, 7 ++ 5, ..., 7 ++++ ++++ 5 (все оценки до 7 + (+ ... + 5) = 12). 5+ не действительный Python. Смотри также этот вопрос .

Альтернативная идея : В зависимости от того, для чего вы на самом деле хотели использовать оператор ++, вы можете рассмотреть вопрос о перегрузке унарного (префикс) оператора плюс . Обратите внимание, подумал, что это может привести к некоторому странному виду кода. Другие люди, просматривающие ваш код, вероятно, сочтут, что это не работает, и будут сбиты с толку.

7 голосов
/ 22 апреля 2009

Каждый делает хорошие замечания, я просто хотел бы прояснить еще одну вещь. Откройте интерпретатор Python и проверьте это:

>>> i = 1
>>> ++i
1
>>> i
1

В Python нет оператора ++ (или -). Причина, по которой он ведет себя так же, как и раньше (вместо синтаксической ошибки), заключается в том, что + и - являются допустимыми унарными операторами, действующими в основном как знак на цифрах. Вы можете думать о ++i как "+ (+ i)", а --i как "- (- i)". Ожидание, что ++i будет работать как на любом другом языке, ведет к совершенно коварным поискам ошибок. C программисты: вас предупреждают.

Стрижка i++ или i-- действительно терпит неудачу, для чего она стоит.

5 голосов
/ 29 июля 2009

Вы можете взломать его, хотя это приводит к нежелательным последствиям:

class myint_plus:
    def __init__(self,myint_instance):
        self.myint_instance = myint_instance

    def __pos__(self):
        self.myint_instance.i += 1
        return self.myint_instance

class myint:
    def __init__(self,i):
        self.i = i

    def __pos__(self):
        return myint_plus(self)

    def __repr__(self):
        return self.i.__repr__()


x = myint(1)
print x
++x
print x

вывод:

1
2
5 голосов
/ 22 апреля 2009

Оператор ++ в Python не существует, поэтому вы действительно не можете его перегрузить.

Что происходит, когда вы делаете что-то вроде:

1 ++ 2

на самом деле

1 + (+2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...