2010-04-19 11 views
5

¿Por qué no puedo redefinir el operador __and__?redefinir operador __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() 

Quiero (a>0) && (b>0), pero tengo b, que el comportamiento habitual de and

+0

b = corte ("b> 0") se deben cortar (en mayúsculas) – joaquin

Respuesta

10

__and__ es el binario (bit a bit) & operador, no el and operador lógico.

Como el operador and es un operador de cortocircuito, no se puede implementar como una función. Es decir, si el primer argumento es falso, el segundo argumento no se evalúa en absoluto. Si intenta implementar eso como una función, ambos argumentos deben evaluarse antes de poder invocar la función.

+1

Tenga en cuenta que podría * * permitir que la sobrecarga del 'y' con cortocircuito proporcionando una interfaz más compleja, como se ha sugerido para Python (http://www.python.org/dev/peps/pep-0335/), aunque no es compatible. –

+0

Interesante, no había visto esa PEP. –

Cuestiones relacionadas