【发布时间】:2016-06-14 13:58:21
【问题描述】:
用 Python 做实验后,我来到了代码:
class Chainable(object):
value = []
def __init__(self,*args):
self.value = []
for a in args:
if isinstance(a,list):
self.value += a
elif isinstance(a,tuple):
self.value += list(a)
else:
self.value += [a]
return
def __lt__(self,a):
self.value = [a]+self.value
return self
def __gt__(self,a):
self.value = self.value+[a]
return self
def __or__(self,x):
self.value += [x]
return self
当我运行这样的代码时:
a = Chainable(1,2,3)
我可以问:a | 4 | 5 并以[1,2,3,4,5] 接收结果。
但是当我要求a > 4 > 5 时,我得到的只是False 和a = [1,2,3,4]。
你能指点一下运算符排序表吗?
【问题讨论】:
-
a > 4 > 5是a > 4 and 4 > 5,而4明显小于5。你期待什么答案?见docs.python.org/2/reference/expressions.html#not-in -
结果是可以理解的,但与|相同的代码工作。
-
...是吗?
|不是比较运算符,因此不调用链接,但>是。 -
其他运算符也不只是"从左到右的顺序";还有precedence rules。
-
是的,我明白这一点,但是使用比较运算符来定义您自己的语法只会让其他尝试使用您的代码的人感到困惑。也许坚持使用移位运算符
<<和>>,它们的行为更接近您的预期?
标签: python overloading operator-keyword