Рассмотрим следующий код Python:
class MyClass:
def __radd__(self, a):
print "foo", a
return a
p = MyClass()
Чтобы вызвать radd, можно запустить следующее:
>>> print "bar"+p
foo bar
bar
Это ожидаемое поведение.__add__
запускается и дает сбой, поэтому __radd__
вступает во владение и обрабатывает ситуацию.Но с массивами numpy он ведет себя немного иначе:
>>> v = np.arange(2)
>>> print v+p
foo 0.
foo 1.
[0. 1.]
Кажется, что в отличие от приведенного выше примера v.__add__
итеративно проходит через компоненты v
и выполняет на них p.__radd__
.Другими словами, он решил, что возвращаемый тип будет ndarray
(до тех пор, пока код не потерпит крах).Я понимаю, что это numpy, который пытается быть умным, но иногда я хотел бы, чтобы мой класс занимался арифметикой.
Возможно ли получить стандартное __radd__
поведение с numpy массивами?