【发布时间】:2016-06-16 20:45:21
【问题描述】:
我有一个对象,它描述了一个包含多个所需数据和元数据的数据集。不同的数据和元数据元素本身是相同类型的对象,具有许多不同的属性,包括名称和值属性。与这些数据元素的大多数交互都是与 value 属性,使用 .value 不断引用它变得很烦人,所以我试图为每个数据元素定义一个属性,但我想以编程方式进行,所以当我添加一个新的数据元素,它会自动获取为其定义的属性。具体来说,这里有一些示例代码:
class my_par(object):
def __init__(self, name, value):
self.name = name
self.value = value
class my_obj(object):
def __init__(self, xval, yval, zval):
self.xval = my_par('x', xval)
self.yval = my_par('y', yval)
self.zval = my_par('z', zval)
我可以使用 my_obj 类创建属性
@property
def x(self):
return self.xval.value
@x.setter
def x(self, value):
self.xval.value = value
但我想要一种以编程方式对所有 my_par 类型对象执行此操作的方法。 (我已经对这些对象有一个迭代器,所以我需要的只是以编程方式定义属性的代码)。
【问题讨论】:
-
一个相关且非常著名的 SO 页面是 How to add property to a python class dynamically?,另一个来自 @AlexMartelli 的有趣答案是 Dynamically adding \@property in python。
-
我发现那些页面试图解决这个问题,它们提供了帮助,但它们并没有完全按照我的意愿去做,即在
__init__中定义属性,因此它们存在于所有实例中。
标签: python