Ich habe eine Frage zu überschreiben Operanden. Ich habe gerade versucht, den Operator __add__(self, other)
in einer benutzerdefinierten Klasse zu überschreiben, so dass eines seiner Elemente (ein numpy-Array) zu einem anderen numpy-Array hinzugefügt werden kann. Um beide Richtungen der Summierung möglich zu machen, habe ich sowohl den als auch den __radd__
Operator deklariert. Ein kleines Beispiel:Python-Klasse Summe mit numpy Array
import numpy as np
class MyClass():
def __init__(self, x):
self.x = x
self._mat = self._calc_mat()
def _calc_mat(self):
return np.eye(2)*self.x
def __add__(self, other):
return self._mat + other
def __radd__(self, other):
return self._mat + other
def some_function(x):
return x + np.ones(4).reshape((2,2))
def some_other_function(x):
return np.ones(4).reshape((2,2)) + x
inst = MyClass(3)
some_function(x=inst)
some_other_function(x=inst)
Seltsamerweise bekomme ich zwei verschiedene Ausgänge. Der erste Ausgang von some_function
ist wie erwartet:
Out[1]
array([[ 4., 1.],
[ 1., 4.]])
Der zweite Ausgang gibt mir etwas Merkwürdiges:
Out[2]:
array([[array([[ 4., 1.],
[ 1., 4.]]),
array([[ 4., 1.],
[ 1., 4.]])],
[array([[ 4., 1.],
[ 1., 4.]]),
array([[ 4., 1.],
[ 1., 4.]])]], dtype=object)
Hat jemand eine Idee, warum das so ist?
Danke, Markus :-)