переопределить оператор __and__ - PullRequest
5 голосов
/ 19 апреля 2010

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

Ответы [ 2 ]

11 голосов
/ 19 апреля 2010

__and__ - это двоичный (побитовый) оператор &, а не логический оператор and.

Поскольку оператор and является оператором короткого замыкания, его нельзя реализовать как функцию. То есть, если первый аргумент является ложным, второй аргумент вообще не оценивается. Если вы попытаетесь реализовать это как функцию, оба аргумента должны быть оценены до того, как функция может быть вызвана.

0 голосов
/ 19 апреля 2010

потому что вы не можете переопределить ключевое слово (вот что такое and) в Python. __add__ используется, чтобы сделать что-то еще:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...