Ste*_*202 16
不,不可能重载一元++运算符,因为它根本不是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
Run Code Online (Sandbox Code Playgroud)
Python中没有++(或 - )运算符.它的行为(而不是语法错误)的原因是+和 - 是有效的一元运算符,基本上就像数字上的符号一样.您可以将其++i视为"+(+ i)"和--i" - ( - i)".期待++i像任何其他语言一样工作导致绝对阴险的狩猎.C程序员:你们要受到警告.
直接i++或i--确实失败,因为它的价值.
嗯,Python中不存在++运算符,所以你真的不能超载它.
当您执行以下操作时会发生什么:
1 ++ 2
实际上是
1 + (+2)
小智 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
Run Code Online (Sandbox Code Playgroud)
输出是:
1
2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3329 次 |
| 最近记录: |