Pythonで逆アセンブル演算子または交差演算子を使用することに違いはありますか?Pythonで反転セット演算子を実際に使用する
例えば、
s & z
がs.__and__(z)
z & s
これらは同じものを返すことになっている場合s.__rand__(z)
に対応に対応して、なぜ最初の場所での逆演算子を持っていますか?何か不足していますか?
Pythonで逆アセンブル演算子または交差演算子を使用することに違いはありますか?Pythonで反転セット演算子を実際に使用する
例えば、
s & z
がs.__and__(z)
z & s
これらは同じものを返すことになっている場合s.__rand__(z)
に対応に対応して、なぜ最初の場所での逆演算子を持っていますか?何か不足していますか?
set
とfrozenset
は数字プロトコルに従います。これらはdon't define the reversed operations explicitlyですが、implement the normal methods (like __and__
)であるため、これらは「無料」になります。
逆の操作は、サブクラスを扱うときに特に役に立ちます。その理由は、right operand is a subclass of the left operand the reversed operation is attempted firstの場合です。しかし、平文set
とfrozenset
の場合、これらはお互いに継承しないので、違いはありません。
これらの逆の操作は、最初のオペランドがを返した場合にも使用されます(__add__
)。しかし、もう一度set
とfrozenset
の場合には、他のオペランドが別の場合はset
の場合はset
と少なくともset
とfrozenset
はNotImplemented
を返しません。
z & s
は、s
がz
のサブクラスである場合を除き、s.__rand__(z)
に対応しません。それ以外の場合は、s.__rand__(z)
の前にz.__and__(s)
が試行されます。
逆ユニオンと交差のユースケースはあるのでしょうか?「なぜこれらのメソッドが存在するのか」を説明する必要があります。
'set'または' frozenset'を継承するカスタムクラスを作成し、これらのクラスに異なる '__and__'メソッドがあるとしたら、その序列と' __rand__'メソッドにも含まれているものを監視する必要がありますか? – MadPhysicist
実際に 'set'と' frozenset'では、サブクラス化してもう一方を操作しようとするときには、順序を慎重にする必要があります。 'set'をサブクラス化して' __and__'と '__rand__'を実装すると、' set()&subclass() '(=>'サブクラス.__ rand__'が最初に呼び出される)または ' subclass()&set() '(=>'サブクラス.__と__が最初に呼び出されます)。しかし、このサブクラスを 'frozenset'で使用しようとすると、' frozenset()&subclass() 'が' frozenset .__ and__'を最初に呼び出します。 – MSeifert
左側のオブジェクトが '__and__'メソッドを実装していない場合です。 –