Python 如何存储属性列表(而不是属性值)?

Python 如何存储属性列表(而不是属性值)?,python,Python,我有一个具有一些属性的类。我想存储此类实例的属性列表,如下所示: obj = MyClass() prop_list = [ obj.prop1, obj.prop2, obj.prop3, obj.prop1, obj.prop3 ] 以这样的方式 prop_list[0] = something 将调用属性设置器(当然不一定使用相同的语法)。这有可能吗?存储属性的名称,然后使用setattr: obj = MyClass() prop_list = [ "prop1", "prop2",

我有一个具有一些属性的类。我想存储此类实例的属性列表,如下所示:

obj = MyClass()
prop_list = [ obj.prop1, obj.prop2, obj.prop3, obj.prop1, obj.prop3 ]
以这样的方式

prop_list[0] = something

将调用属性设置器(当然不一定使用相同的语法)。这有可能吗?

存储属性的名称,然后使用
setattr

obj = MyClass()
prop_list = [ "prop1", "prop2", "prop3", "prop1", "prop3" ]
setattr(obj, prop_list[0], something)
如果确实需要项分配语法,也可以使用自定义类:

class CustomPropertyList(object):
    def __init__(self, obj, names):
        self.obj = obj
        self.property_names = list(names)

    def __getitem__(self, item):
        return getattr(self.obj, self.property_names[item])

    def __setitem__(self, item, value):
        setattr(self.obj, self.property_names[item], value)

prop_list = CustomPropertyList(obj, ["prop1", "prop2", "prop3", "prop1", "prop3"])
prop_list[0] = something
你可以做:

getter = [ lambda x=x: getattr(obj, x) for x in ['prop1', 'prop2', 'prop3'] ]
setter = [ lambda v, x=x: setattr(obj, x, v) for x in ['prop1', 'prop2', 'prop3'] ]
然后像这样使用它:

getter[0]()
这将返回
obj.prop1
的值

类似地,您可以使用
setter
设置新属性:

setter[1]('test')

将创建
obj.prop2='test'

在倒数第二行中,您忘记将前导的
obj
参数传递给
CustomPropertyList()
。此外,如果您将定义
def\uu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoself,obj,names:
更改为
def\uuuuuuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuoself,obj,self,obj,*。谢谢,修好了。