Допустим, у меня есть класс Python A
:
class A:
def __init__(self, matrix, metadata: list):
self.matrix = np.array(matrix)
self.metadata = metadata
#...
Теперь я хочу, чтобы все арифметические операции работали для моего класса. Они должны были просто перевести операцию на matrix
, то есть так:
def __add__(self, other):
if isinstance(other, type(self)):
raise ValueError("Not allowed.")
else:
return A(
matrix=self.matrix.__add__(other),
metadata=self.metadata,
)
Теперь проблема в том, что мне приходится повторять практически одинаковый код для каждой магической арифметической функции, т.е. __add__, __sub__, __mul__, __truediv__, __pow__, __radd__, __rsub__, __rmul__, __rtruediv__, __iadd__, __isub__, __imul__, __itruediv__, __abs__, __round__, __floor__, __ceil__, __trunc__
. Что приводит к большому количеству повторяющихся кодов.
Как я могу определить их динамически в цикле for? как
magic_functions = ["__add__", "__sub__", ...]
for magic_function in magic_functions:
# define the method and add it to the class