我有一个对象,它在一个 numpy 数组中包含它的许多字段(它们都是 float64 类型)。其中一些字段具有我想在访问/写入时使用的有意义的名称,但以我目前的知识,我必须像这样访问和编写:
//access:
value = data[0]
//write:
data[0] = value
如果我在 C 中工作,我会做这样的事情:
#define fieldname data[0]
//access:
value = fieldname
//write:
fieldname = value
我怎样才能在 python 中做同样干净的事情?
编辑:所有这些字段都必须保留在 numpy 数组中,因为它们通过使用 numpy 矩阵运算的线性变换得到更新。
编辑:如果我写这个方法:
def fieldname(self):
return self.data[0]
我的访问看起来像预期的那样,但我不能以相同的方式写回数据。
//access:
value = self.fieldname
(在此之前的代码中省略了 self ,因为我觉得这个问题泛化到对象之外的情况。)
这篇关于重载赋值运算符的帖子可能与我想要的很接近: 如何在 Python 中模拟赋值运算符重载?
解决方案:编写获取字段名称__getattr__
并__setattr__
在 self.data 上执行必要操作的方法。当提供的字段名称与数据以外的另一个属性的字段名称匹配时,这些将不会被调用,并在提供这些特殊属性的名称时添加从数据中获取内容的功能。