В чем разница между "__and__" и "__rand__" в наборе классов? - PullRequest
1 голос
/ 20 сентября 2019

Я прочитал книгу Лучано Рамалхо "Свободный питон".В описании класса set он пишет:

s & z   # s.__and__(z)   - intersection of s and z
z & s   # s.__rand__(z)   - inversion operator &

Я не могу понять.Почему во втором случае он не пишет: z.__and__(s).Автор сказал: «пересечение s и z»! = «Оператор инверсии &».

Равны ли __and__ и __rand__ для set() или нет?

1 Ответ

1 голос
/ 20 сентября 2019

Я не могу понять.Почему во втором случае он не пишет: z.__rand__(s).

Потому что в этом и заключается смысл обратных операторов.Они также существуют в виде __radd__, __rsub__ и т. Д.

Если при выполнении a & b, вызов a.__and__(b) не существует или возвращает NotImplemented, он пытается (как«последнее средство») для вызова b.__rand__(a).

Подробнее см. в соответствующей части документации Python .

В вашем примере, вероятно, класс z не реализует __and__, поэтому возвращается к s, который поставляет __rand__.

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