カスタムクラスがあり、いくつかの人工演算子をオーバーロードしたいのですが、それぞれのコードを個別に書き出す必要がないようにする方法があるのではないかと思います。各演算子を1つずつ明示的にオーバーロードしない例を見つけることができませんでした。
class Foo(object):
a=0
def __init__(self, a):
self.a=a
def __add__(self, other):
#common logic here
return Foo(self.a+other.a)
def __sub__(self, other):
#common logic here
return Foo(self.a-other.a)
def __mul__(self, other):
#common logic here
return Foo(self.a*other.a)
#etc...
ロジックはこれよりも少し複雑ですが、一般的なパターンは、各演算子のオーバーロードメソッドに、操作が許可されていることを確認するための同一のコードが含まれ、クラスメンバーを使用して操作を構築することです。冗長なコードを減らしたい。これは機能します:
class Foo(object):
a=0
def __init__(self, a):
self.a=a
def operate(self, other, operator):
#common logic here
a = constructOperation(self.a, other.a, operator)
return Foo(a)
def __add__(self, other):
return self.operate(other, "+")
def __sub__(self, other):
return self.operate(other, "-")
def constructOperation(operand0, operand1, operator):
if operator=="+":
return operand0 + operand1
if operator=="-":
return operand0 - operand1
しかし、そのように手動で操作を構築するのはちょっとばかげているようです。このアプローチは理にかなっていますか、それともここでより良い方法がありますか?