问题描述
对于“普通”Python 类,我习惯于能够任意添加额外的属性。例如,我可以执行以下操作:
# Create a class
class MyClass: pass
# Create an object of this class
my_object = MyClass()
# Add any attribute I want
my_object.my_new_attribute = "Hello World!"
# Now it has this attribute and I can use it:
print(my_object.my_new_attribute)
这运行没有错误并打印 Hello World!
但是,我似乎无法使用 numpy.ndarray
执行此操作。考虑以下几点:
# Create an object of the ndarray class:
import numpy as np
my_object = np.array([1,2,3])
# Verify it is indeed of the `numpy.ndarray` type:
print(type(my_object))
# Add a new atribute
my_object.my_new_attribute = "Hello World!"
这输出 <class 'numpy.ndarray'>
,验证我们确实有某个类的对象,但是当尝试添加新属性时,我们得到一个错误:AttributeError: 'numpy.ndarray' object has no attribute 'my_new_attribute'
这是为什么?我理解错误是因为 numpy.ndarray
确实没有这样的属性,但 MyClass
在第一个示例中也没有,这并没有阻止我添加它。
解决方法
需要继承np.ndarray
对象并通过__new__
方法添加属性。 adding an extra attribute to ndarray 的文档中有一个部分。