set
i frozenset
śledzić protokół numer i oni don't define the reversed operations explicitly ale dostać te „za darmo”, ponieważ implement the normal methods (like __and__
).
Jednak operacje odwrotne są szczególnie przydatne w przypadku podklas, ponieważ jeśli right operand is a subclass of the left operand the reversed operation is attempted first. Ale w przypadku zwykłych set
s i frozenset
s nie ma to znaczenia, ponieważ nie dziedziczą one od siebie nawzajem.
Te odwrócone operacje są również używane, jeśli pierwszy operand zwraca NotImplemented
w swoim numerze __add__
. Ale znowu nie jest to użyteczne dla set
i frozenset
, ponieważ pozwalają one tylko operacjom z innymi set
-alekami i co najmniej set
i frozenset
nie zwracają NotImplemented
, gdy inny operand jest inny set
.
Również z & s
nie odpowiada s.__rand__(z)
, chyba że s
jest podklasą z
. W przeciwnym razie zostanie podjęta próba przed s.__rand__(z)
.
Tak więc wątpię, aby były przypadki użycia dla odwróconego związku i skrzyżowania, ale powinno to wyjaśniać "dlaczego te metody istnieją".
Dzieje się tak, gdy obiekt po lewej stronie nie implementuje metody "__and__". –