2010-04-19 87 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