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