4

クラスのcaret動作をオーバーライドする必要がありますが、どの演算子のオーバーロードがそれに適用されるかわかりません。例えば:

class A: 
    def __init__(self, f):
        self.f = f
    def __caret__(self, other):
        return self.f^other.f

print A(1)^A(2)

このコードは次のエラーでエラーになります:

TypeError: unsupported operand type(s) for ^: 'instance' and 'instance'

動作を制御できるようにクラスを作成するにはどうすればよいですか?

4

2 に答える 2

13

A.__xor__()またはを定義しA.__rxor__()ます。

于 2012-05-15T23:57:51.930 に答える
3

^はxor演算子です。メソッドでオーバーロードできます__xor__

例えば

>>> class One:
...     def __xor__(self, other):
...             return 1 ^ other
... 
>>> o = One()
>>> o ^ 1
0
>>> o ^ 0
1
于 2012-05-16T00:03:39.813 に答える