Frage

Warum ich den __and__ Operator nicht neu definieren kann?

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

War es hilfreich?

Lösung

__and__ ist der binäre (bitweise) & Operator, nicht der logische and Operator.

Da der and Betreiber ein Kurzschluss-Operator ist, kann sie nicht als eine Funktion implementiert werden. Das heißt, wenn das erste Argument falsch ist, wird das zweite Argument überhaupt nicht bewertet. Wenn Sie versuchen, dass als eine Funktion zu implementieren, haben beide Argumente bewertet werden, bevor die Funktion aufgerufen werden kann.

Andere Tipps

, weil Sie kein Schlüsselwort neu definieren kann (das ist, was and ist) in Python. __add__ wird verwendet, um etwas anderes zu tun:

  

Diese Methoden aufgerufen werden die binären arithmetischen Operationen zu implementieren (... & ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top