redéfinir __and__ opérateur
-
28-09-2019 - |
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
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 (...
&
...