Python-将实例函数调用传递给属性
我试图编写一个定制的numpy数组包装器,99%的时候它的行为都像一个numpy数组,但是对于我们的特定用例有一些额外的索引功能。我想知道这种行为是否可能 理想情况下,我能够将该类的实例视为其所有行为的属性之一,但我专门重写的任何行为除外。我希望能够调用包装器类上的所有numpy函数,除了一些特定的调用 例如:Python-将实例函数调用传递给属性,python,numpy,Python,Numpy,我试图编写一个定制的numpy数组包装器,99%的时候它的行为都像一个numpy数组,但是对于我们的特定用例有一些额外的索引功能。我想知道这种行为是否可能 理想情况下,我能够将该类的实例视为其所有行为的属性之一,但我专门重写的任何行为除外。我希望能够调用包装器类上的所有numpy函数,除了一些特定的调用 例如: class LabeledArray(object): def __init__(self, array, label): self.array = array
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
太棒了,谢谢你!我没有意识到子类化是我所寻找的合适术语。没问题-子类化是一种添加额外功能或修改类现有功能的方法。它可以是非常强大的,有助于保持干燥(不要重复自己)的方法。