2010-04-19 12 views
5

Warum kann ich den Operator __and__ nicht neu definieren?neu definieren __and__ operator

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() 

Ich will (a>0) && (b>0), aber ich habe b, dass das übliche Verhalten von and

+0

b = cut ("b> 0") sollte – joaquin

Antwort

10

__and__ die binär ist (bitweise) & Operator, nicht den logischen and Operator.

Da der Operator and ein Kurzschlussoperator ist, kann er nicht als Funktion implementiert werden. Das heißt, wenn das erste Argument falsch ist, wird das zweite Argument überhaupt nicht ausgewertet. Wenn Sie versuchen, das als eine Funktion zu implementieren, müssen beide Argumente ausgewertet werden, bevor die Funktion aufgerufen werden kann.

+1

Hinweis Cut (Großbuchstaben), die Sie * * Überlastung 'und' ermöglichen könnten, mit Kurzschließen durch Bereitstellen einer komplexeren Schnittstelle, wie es für Python (http://www.python.org/dev/peps/pep-0335/) vorgeschlagen wurde, obwohl es nicht unterstützt wird. –

+0

Interessant, ich hatte diese PEP nicht gesehen. –

Verwandte Themen