是否可以在 Python 中重载 ++ 运算符?
5 回答
Python中没有++
运算符(也没有'--')。递增通常由+=
运算符完成。
不,不可能重载一元 ++ 运算符,因为它在 Python 中根本不是运算符。
只有 Python 语法允许的运算符(其子集)(在该语言中已经有一个或多个用途的运算符)可能会被重载。
这些是有效的 Python 运算符,此页面列出了您可以定义以重载它们的方法(具有两个前导和尾随下划线的方法)。
与其他语言中常用的 i++ 不同,在 Python 中写为 i += 1。
在 python 中,+ 号需要在其右侧有一个操作数。它的左侧也可能有一个操作数,在这种情况下,它将被解释为二进制而不是一元运算符。+5, ++5, ..., ++++++5 都是有效的 Python 表达式(都计算为 5),7 + 5, 7 ++ 5, ..., 7 ++++ ++++ 5(全部计算为 7 + (+...+5) = 12)。5+不是有效的 Python。另请参阅此问题。
另一种想法:根据您实际想要使用 ++ 运算符的目的,您可能需要考虑重载一元(前缀)加运算符。请注意,认为这可能会导致一些看起来很奇怪的代码。其他查看您的代码的人可能会认为它是无操作的并且会感到困惑。
每个人都说得很好,我只想澄清另一件事。打开 Python 解释器并检查一下:
>>> i = 1
>>> ++i
1
>>> i
1
Python 中没有 ++(或 --)运算符。它表现得如此(而不是语法错误)的原因是 + 和 - 是有效的一元运算符,基本上就像数字上的符号一样。您可以将其++i
视为“+(+i)”和--i
“-(-i)”。期望++i
像使用任何其他语言一样工作会导致绝对阴险的错误搜索。C 程序员:请注意。
对于它的价值,顺子i++
或确实失败了。i--
好吧,Python 中不存在 ++ 运算符,所以你真的不能重载它。
当您执行以下操作时会发生什么:
1 ++ 2
实际上是
1 + (+2)
你可以破解它,尽管这会带来一些不良后果:
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