如何子类化ndarray来累计记录加法运算符的个数?

How to Subclassing ndarray to cumulatively record the number of addition operators?

我正在使用 Python 并且我正在尝试构建一个 class,例如 Numbers,使用 Subclassing ndarray。我希望我的 class 满足以下两个属性:

这是我试过的

import numpy as np

class Numbers(np.ndarray):

    nb_add = 0

    def __new__(cls, values):
        self = np.asarray(values).view(cls)
        return self 

    def __add__(self, new_numbers):
        Numbers.nb_add += len(new_numbers)
        return self + new_numbers

a = Numbers([1,2,3,4])
b = Numbers([5,6,7,8])
c = a+b 
print(a.reshape(2, 2)) # expect [[1,2], [3,4]]
print(Numbers.nb_add)# expect 4 = number of addtions

但是方法__add__会出错。

我找到了一个类似的 post here,但我要找的不是这种情况。

有人能帮帮我吗?谢谢!

问题是表达式 self + new_numbers 引用了 Numbers 的 __add__ 方法,因此该方法调用了自身。 如果显式调用基class的__add__方法,那么你会得到你想要的结果:

import numpy as np

class Numbers(np.ndarray):

    nb_add = 0

    def __new__(cls, values):
        self = np.asarray(values).view(cls)
        return self

    def __add__(self, new_numbers):
        Numbers.nb_add += len(new_numbers)
        return np.ndarray.__add__(self,new_numbers)

a = Numbers([1,2,3,4])
b = Numbers([5,6,7,8])
c = a+b 
print(a.reshape(2, 2)) # expect [[1,2], [3,4]]
print(Numbers.nb_add)# expect 4 = number of addtions