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

时间:2009-04-21 21:49:16

标签: python operator-overloading

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

5 个答案:

答案 0 :(得分:18)

Python中没有++运算符(也不是' - ')。通常使用+=运算符来进行递增。

答案 1 :(得分:16)

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

只有(一部分)Python语法允许的运算符(那些已经在语言中有一个或多个用法的运算符)可能会重载。

These是有效的Python运算符,this page列出了可以定义以重载它们的方法(具有两个前导和尾部下划线的方法)。

而不是像其他语言中常用的i ++,在Python中写一个i + = 1。

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

替代想法:根据您实际想要使用++运算符的内容,您可能需要考虑重载unary (prefix) plus operator。请注意,这可能导致一些奇怪的代码。其他人看着你的代码可能会认为这是一个无操作并且感到困惑。

答案 2 :(得分:7)

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

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

Python中没有++(或 - )运算符。它的行为(而不是语法错误)的原因是+和 - 是有效的一元运算符,基本上就像数字上的符号一样。您可以将++i视为“+(+ i)”,将--i视为“ - ( - i)”。期待++i像任何其他语言一样工作会导致绝对阴险的狩猎。 C程序员:你们被警告。

直接i++i--确实失败了,因为它的价值。

答案 3 :(得分:5)

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

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

1 ++ 2

实际上是

1 + (+2)

答案 4 :(得分: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