Question

Pourquoi je ne peux pas redéfinir l'opérateur __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()

Je veux (a>0) && (b>0), mais je suis b, que le comportement habituel de and

Était-ce utile?

La solution

__and__ est l'opérateur de & binaire (binaire), et non l'opérateur de and logique.

Parce que l'opérateur and est un opérateur de court-circuit, il ne peut pas être mis en œuvre en fonction. C'est, si le premier argument est faux, le second argument n'est pas évalué du tout. Si vous essayez de mettre en œuvre qu'en fonction, les deux arguments doivent être évalués avant que la fonction ne peut être invoquée.

Autres conseils

parce que vous ne pouvez pas redéfinir un mot-clé (c'est ce que and est) en Python. __add__ est utilisé pour faire autre chose:

  

Ces méthodes sont appelées à mettre en œuvre les opérations arithmétiques binaires (... & ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top