2010-04-19 68 views
5

为什么我不能重新定义__and__运算符?重新定义__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

B =切( “B> 0”),应切断(大写) – joaquin 2010-04-19 15:35:21

回答

10

__and__通常的行为是二进制(位)&运营商,而不是逻辑and操作。

由于and运营商是一个短路运营商,它不能作为一个功能实现。也就是说,如果第一个参数为false,则第二个参数根本不会被评估。如果您试图将其作为函数来实现,那么在调用该函数之前,必须对两个参数进行评估。

+1

注意,你可能* *允许'和'超载通过提供更复杂的接口来实现短路,正如Python(http://www.python.org/dev/peps/pep-0335/)所建议的那样,虽然它不被支持。 – 2010-04-19 15:55:18

+0

有趣的是,我没有看到过PEP。 – 2010-04-19 16:32:19