向 numpy.ndarray 添加任意额外的属性

问题描述

对于“普通”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 的文档中有一个部分。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...