3
考虑以下Python代码工作:如何获得__radd__与numpy的阵列
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__
的例子itterativly通过v
的组件和performes p.__radd__
他们去。换句话说,它决定返回类型将是ndarray
(只要代码不会崩溃)。我知道这是一种努力变得聪明的努力,但有时我希望我的班级能够处理这种情况。
是否有可能使用numpy数组获得标准__radd__
行为?
它具有相当的意义。 – Jonathan 2011-05-26 09:32:18
它虽然创建了一个新问题。子集在创建时会产生一个错误:'TypeError:requires argument'shape'(pos 1)not found'。定制'__init__'是我的第一个想法,但没有用。有没有办法解决这个问题(例如通过黑客攻击__new__)? – Jonathan 2011-05-26 09:44:35
我不确切知道numpy是如何工作的,但是可能会覆盖'__new__'来解决问题。 – 2011-05-26 11:32:33