ビット演算を実行できるようにするクラスがあります。Pythonでブール演算子を使用するためのビット演算子のオーバーロード
この時点でclass Measurement(object):
def __init__(self, value = None, category = None, measure = None):
self.value = value
self.category = category
self.measure = measure
def __nonzero__(self):
return self.value.__nonzero__()
def __or__(self, other):
return self.__nonzero__() | other
a = False
b = Measurement(True)
c = b | a
作品が、c = a | b
は型エラーを示します。どのようにして両方の方法で動作させるのですか?
さらに、これを行うためのよりエレガントな方法があります。たとえば、私は__nonzero__
を定義するだけで正しい動作を得ることができると期待していましたが、そうではありません。
私はPython 2.7を使用しています。
これは、私が解決したのと同じような質問を思い出させます。これは、カスタムVectorクラスの乗算演算を実装することでした。解決策は、 '__rmul__'をオーバーライドすることでした(引数を切り替えて' __mul__'を呼び出すようにしました)。これに似た解決策があるのだろうかと思います。 – Tagc
@Tagcはい。 [関連ドキュメント](https://docs.python.org/3/reference/datamodel.html#emulating-numeric-types)です。 –
これは、それが行われると思われる方法です。明示的なものは暗黙的なものより優れていて、それはすべて... –