2

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

4

5 回答 5

20

Python中没有++运算符(也没有'--')。递增通常由+=运算符完成。

于 2009-04-21T21:52:13.067 回答
18

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

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

这些是有效的 Python 运算符,此页面列出了您可以定义以重载它们的方法(具有两个前导和尾随下划线的方法)。

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

在 python 中,+ 号需要在其右侧有一个操作数。它的左侧也可能有一个操作数,在这种情况下,它将被解释为二进制而不是一元运算符。+5, ++5, ..., ++++++5 都是有效的 Python 表达式(都计算为 5),7 + 5, 7 ++ 5, ..., 7 ++++ ++++ 5(全部计算为 7 + (+...+5) = 12)。5+不是有效的 Python。另请参阅此问题

另一种想法:根据您实际想要使用 ++ 运算符的目的,您可能需要考虑重载一元(前缀)加运算符。请注意,认为这可能会导致一些看起来很奇怪的代码。其他查看您的代码的人可能会认为它是无操作的并且会感到困惑。

于 2009-04-21T21:51:54.987 回答
7

每个人都说得很好,我只想澄清另一件事。打开 Python 解释器并检查一下:

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

Python 中没有 ++(或 --)运算符。它表现得如此(而不是语法错误)的原因是 + 和 - 是有效的一元运算符,基本上就像数字上的符号一样。您可以将其++i视为“+(+i)”和--i“-(-i)”。期望++i像使用任何其他语言一样工作会导致绝对阴险的错误搜索。C 程序员:请注意。

对于它的价值,顺子i++或确实失败了。i--

于 2009-04-21T22:05:23.797 回答
5

好吧,Python 中不存在 ++ 运算符,所以你真的不能重载它。

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

1 ++ 2

实际上是

1 + (+2)
于 2009-04-21T21:53:05.670 回答
5

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

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
于 2009-07-28T22:49:21.630 回答