【发布时间】:2019-02-08 22:40:52
【问题描述】:
为了在 Python 中创建与 Matlab 的结构等效的东西,我想创建一个类,该类的设计使得当它的实例被赋予一个整个类还没有的新属性时,该类被自动声明为具有该名称的属性(但动态值)。
例如,如果我以这种方式定义了 color 类,但没有开始的属性,那么我可以执行以下操作:
>> red = color()
>> blue = color()
>> blue.temperature
AttributeError: type object 'color' has no attribute 'temperature'
>> red.temperature = 'hot'
>> blue.temperature
blue.temperature = ''
>> blue.temperature = 'cool'
有没有办法破解添加另一个属性的过程并向其添加类似cls.x = '' 的命令,其中x 是添加到实例的属性名称的变量?
【问题讨论】:
-
实例属性和类属性是两个不同的东西。
-
不要尝试。它不适合 python oop 模型。
-
@juanpa.arrivillaga,我误读了这个问题。他想模拟 MATLAB
struct。scipy.io.loadmat将struct转换为numpy结构化/记录数组,其中 dtype 字段对应于 MATLAB 中的每个属性(或字段)。在 MATLAB 中,只需为一条记录定义一个值,即可为所有“记录”添加一个属性。 -
您可以将
struct建模为一个字典列表,然后编写一小组实用函数来确保当一个键被添加到列表中的一个字典时,该键将一些默认值添加到所有其他字典中。一旦这些工作令您满意,您可以将其打包为 Python 类。 -
可以在进行过程中向类添加方法和类变量。但是实例变量保存在自己的
.__dict__字典中,不与类或其他实例共享。
标签: python python-3.x class attributes