在继承ndarray
类时,需要确保正确地调用父类的初始化函数,并且在定义新类的方法时遵循规范。以下是一个正确的示例代码:
import numpy as np
class MyArray(np.ndarray):
def __new__(cls, input_array):
obj = np.asarray(input_array).view(cls)
return obj
def __array_finalize__(self, obj):
if obj is None: return
self.info = getattr(obj, 'info', None)
a = np.arange(10)
my_arr = MyArray(a)
my_arr.info = "This is my custom array"
print(my_arr)
print(my_arr.info)
在这个例子中,MyArray
类正确地初始化了继承自ndarray
类的实例,并定义了info
属性来检查它是否记录自定义特性。
通过使用np.asarray()
函数来处理输入,代码在视图中用view()
函数返回一个实例。然后,该实例是通过调用父类的初始化函数正确地初始化的。
最后,通过定义__array_finalize__()
方法来确保从传递的实例继承info
属性。
执行代码,则可以看到自定义特性被正确记录:
[0 1 2 3 4 5 6 7 8 9]
This is my custom array