是否有可能在Python中重载++运算符?
答案 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