Переопределить __ и оператор
-
28-09-2019 - |
Вопрос
Почему я не могу переопределить __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
Решение
__and__
Двоичный (побитовой) &
Оператор, а не логический and
оператор.
Поскольку and
Оператор - это оператор короткого замыкания, он не может быть реализован как функция. То есть, если первый аргумент ложный, второй аргумент не оценивается вообще. Если вы попытаетесь реализовать, что как функция, оба аргумента должны быть оценены до того, как функция может быть вызвана.
Другие советы
потому что вы не можете переопределить ключевое слово (вот что and
есть) в Python. __add__
используется, чтобы сделать что-то еще:
Эти методы вызываются для реализации двоичных арифметических операций (...
&
...
Не связан с StackOverflow