Вопрос

Почему я не могу переопределить __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__ используется, чтобы сделать что-то еще:

Эти методы вызываются для реализации двоичных арифметических операций (...&...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top