我有一个自定义类,我想重载几个算术运算符,想知道是否有一种方法可以避免为每个运算符单独编写代码。我无法找到任何不明确地逐个重载每个运算符的示例。
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
但是像这样手动构建操作似乎有点愚蠢。这种方法是否有意义,或者这里有更好的方法吗?