是否可能过载++;Python中的运算符?
可以在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。另见是否可能过载++;Python中的运算符?,python,operator-overloading,Python,Operator Overloading,可以在Python中重载++运算符吗?不,不能重载一元++运算符,因为它在Python中根本不是运算符 只能重载Python语法允许的运算符(其中的一个子集)(那些在该语言中已经有一个或多个用法的运算符) 是有效的Python运算符,并列出了可以定义以重载它们的方法(带有两个前导和尾随下划线的方法) 与其他语言中常用的i++不同,Python编写i+=1 在python中,+符号的右边需要一个操作数。它的左边可能还有一个操作数,在这种情况下,它将被解释为二进制而不是一元运算符+5、++5、…、+
<强>备选方案:取决于您实际上想要使用++运算符,您可能需要考虑重载。注意,我想,这可能会导致一些奇怪的代码。查看您的代码的其他人可能会认为这是一个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
中如何处理因子。另见杰克的黑客。