6

为什么我不能重新定义__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

4

2 回答 2

13

__and__是二元(按位)&运算符,而不是逻辑and运算符。

因为and算子是短路算子,所以不能作为函数来实现。也就是说,如果第一个参数为假,则根本不计算第二个参数。如果您尝试将其实现为函数,则必须在调用函数之前评估两个参数。

于 2010-04-19T15:33:41.053 回答
1

因为您无法and在 Python 中重新定义关键字(就是这样)。__add__用于做其他事情:

调用这些方法来实现二进制算术运算(&......

于 2010-04-19T15:35:32.967 回答