【发布时间】:2021-06-19 00:10:19
【问题描述】:
对于一个“普通”的 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 在第一个示例中也没有,这并没有阻止我添加它。
【问题讨论】:
-
vars(MyClass())给出{}。vars(np.array([1,2,3]))给出一个错误,关于缺少__dict__属性。ndarray在编译后的代码中使用自定义__new__定义。它没有可以保存用户定义属性的__dict__。列表有问题 - 没有__dict__。
标签: python numpy python-class