Python-将实例函数调用传递给属性

Python-将实例函数调用传递给属性,python,numpy,Python,Numpy,我试图编写一个定制的numpy数组包装器,99%的时候它的行为都像一个numpy数组,但是对于我们的特定用例有一些额外的索引功能。我想知道这种行为是否可能 理想情况下,我能够将该类的实例视为其所有行为的属性之一,但我专门重写的任何行为除外。我希望能够调用包装器类上的所有numpy函数,除了一些特定的调用 例如: class LabeledArray(object): def __init__(self, array, label): self.array = array

我试图编写一个定制的numpy数组包装器,99%的时候它的行为都像一个numpy数组,但是对于我们的特定用例有一些额外的索引功能。我想知道这种行为是否可能

理想情况下,我能够将该类的实例视为其所有行为的属性之一,但我专门重写的任何行为除外。我希望能够调用包装器类上的所有numpy函数,除了一些特定的调用

例如:

class LabeledArray(object):
    def __init__(self, array, label):
        self.array = array
        self.label = label

    def special_thing(self):
        print "I do a special thing here"

la = LabeledArray(np.zeros((5,2)), {'foo': 0, 'bar': 1})

la + 1
=> 
array([[1,1,1,1,1],
       [1,1,1,1,1]])

la.shape
=>
(5,2)

la.special_thing()
=>
"I do a special thing here"
本质上,我希望通过一些自定义的侧边调整来保留numpy(广播等)的优点

我确实意识到我可以只做
la.array+1
,但我想看看是否有任何方法可以抽象掉该层

谢谢大家!

Numpy打开了文档。可用于实现此目的的构造示例如下:

class LabeledArray(np.ndarray):
    def __new__(cls, *args, **kwargs):
        return super(LabeledArray, cls).__new__(cls, *args, **kwargs)

    def special_thing(self):
        print('I do a special thing here')

LA = LabeledArray(shape=(2, 2), dtype=float, order='F')
LA.special_thing()
# I do a special thing here

太棒了,谢谢你!我没有意识到子类化是我所寻找的合适术语。没问题-子类化是一种添加额外功能或修改类现有功能的方法。它可以是非常强大的,有助于保持干燥(不要重复自己)的方法。