是否可能过载++;Python中的运算符?

是否可能过载++;Python中的运算符?,python,operator-overloading,Python,Operator Overloading,可以在Python中重载++运算符吗?不,不能重载一元++运算符,因为它在Python中根本不是运算符 只能重载Python语法允许的运算符(其中的一个子集)(那些在该语言中已经有一个或多个用法的运算符) 是有效的Python运算符,并列出了可以定义以重载它们的方法(带有两个前导和尾随下划线的方法) 与其他语言中常用的i++不同,Python编写i+=1 在python中,+符号的右边需要一个操作数。它的左边可能还有一个操作数,在这种情况下,它将被解释为二进制而不是一元运算符+5、++5、…、+

可以在Python中重载++运算符吗?

不,不能重载一元++运算符,因为它在Python中根本不是运算符

只能重载Python语法允许的运算符(其中的一个子集)(那些在该语言中已经有一个或多个用法的运算符)

是有效的Python运算符,并列出了可以定义以重载它们的方法(带有两个前导和尾随下划线的方法)

与其他语言中常用的i++不同,Python编写i+=1

在python中,+符号的右边需要一个操作数。它的左边可能还有一个操作数,在这种情况下,它将被解释为二进制而不是一元运算符+5、++5、…、+++5都是有效的Python表达式(都计算为5),7+5、7++5、…、7+++5(都计算为7+(++…+5)=12)也是有效的Python表达式。5+不是有效的Python。另见


<强>备选方案:取决于您实际上想要使用++运算符,您可能需要考虑重载。注意,我想,这可能会导致一些奇怪的代码。查看您的代码的其他人可能会认为这是一个no-op并感到困惑。

Python中没有
++
运算符(nor'--')。递增通常是用
+=
操作符来完成的。

好吧,Python中不存在++操作符,所以不能重载它

当您执行以下操作时会发生什么情况:

1 ++ 2 1 ++ 2 实际上是

1 + (+2)
1+(+2)每个人的观点都很好,我只想澄清另一件事。打开Python解释器并查看以下内容:

>>> i = 1
>>> ++i
1
>>> i
1
Python中没有++(或--)运算符。它之所以如此(而不是语法错误)是因为+和-是有效的一元运算符,基本上就像数字上的符号一样。你可以把
++i
看作是一个“+(+i)”,
--i
看作“--i”。期望
++i
像在任何其他语言中一样工作会导致绝对隐蔽的bug搜索。程序员:你应该被警告


一个直接的
i++
i--
确实会失败,这是值得的。

你可以破解它,尽管这会带来一些不良后果:

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

这是..的副本吗?。呃,那你为什么要重载一个不存在的运算符..?爱德华·Z·杨:那是因为它试图调用一个函数
3()
不是函数。最初的观点是,如果它是一个右绑定一元运算符,
3++4
应该无效,因为它是两个像
3 5
一样混在一起的标记。然而,这有点误导,因为Python会根据上下文对plus标记进行不同的处理。不过,我要重申:
++
绝对不是运算符:请参阅语法
因子:(“+”——“|”~')因子功率
以及
编译器/transformer.py
中如何处理
因子。另见杰克的黑客。