为什么我无法重新定义__and__
运算符?
class Cut(object):
def __init__(self, cut):
self.cut = cut
def __and__(self, other):
return Cut("(" + self.cut + ") && (" + other.cut + ")")
a = Cut("a>0")
b = Cut("b>0")
c = a and b
print c.cut()
我想要(a>0) && (b>0)
,但我得到了b,and
的通常行为
答案 0 :(得分:11)
__and__
是二进制(按位)&
运算符,而不是逻辑and
运算符。
因为and
运算符是短路运算符,所以它不能作为函数实现。也就是说,如果第一个参数为false,则根本不评估第二个参数。如果您尝试将其作为函数实现,则必须在调用函数之前评估这两个参数。
答案 1 :(得分:0)
因为您无法在Python中重新定义关键字(即and
)。 __add__
用于执行其他操作:
These methods are called to implement the binary arithmetic operations (...
&
...