Почему я не могу переопределить __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()
Я хочу (a>0) && (b>0)
, но я получил b, что обычное поведение and
__ и __
- это двоичный (побитовый) оператор &
, а не логический оператор и
.
Поскольку оператор и
является оператором короткого замыкания, он не может быть реализован как функция. То есть, если первый аргумент ложен, второй аргумент вообще не оценивается. Если вы попытаетесь реализовать это как функцию, перед вызовом функции необходимо оценить оба аргумента.
, потому что вы не можете переопределить ключевое слово (это то, что и
) в Python. __ add __
используется для чего-то еще:
Эти методы вызываются для реализации двоичных арифметических операций (...
&
...