如何通过引用来修改类属性?

时间:2018-03-26 15:23:58

标签: python class reference attributes

例如下面的例子:

class myClass():
    def __init__(self):
        self.A = 1.

class essai():
    def __init__(self):
        self.C = myClass()

    def ref(self):

        mystring = 'C.A'
        nameclass, nameparam = mystring.split('.')
        print(nameclass, nameparam)
        print(getattr(getattr(self,nameclass),nameparam))
        Ref = getattr(getattr(self,nameclass),nameparam)
        print(Ref)
        self.modify_val(Ref,2)
        print(self.C.A)

    def modify_val(self,x,y):
        x=y


E=essai()
E.ref()

我想要做的是获取AC类的attribut essai的引用。关键是我想使用该引用来更新方法C.Amodify_val的值。通过使用包含类和我想要修改的属性(mystring = 'C.A')的字符串,我不明白我如何获得对该属性的引用(例如C.A)以及我如何可以使用该引用来修改属性。在我的示例中,modify_val函数不会更新C.A值,因为Ref实际上不是引用。 因此我得到:

C A
1.0
1.0
1.0

我希望最后一次打印为2

1 个答案:

答案 0 :(得分:2)

我建议使用setattr(object, name, value)

来自setattr

的python文档
  

setattr(对象,名称,值)

     

这是getattr()的对应物。参数是一个对象,一个   字符串和任意值。该字符串可以命名现有的   属性或新属性。该函数将值赋给   属性,只要对象允许它。例如,setattr(x,   'foobar',123)相当于x.foobar = 123。

nameclassnameparam直接传递给modify_val,您应该可以执行以下操作:

def modify_val(self, nameclass, nameparam, value)
    setattr(getattr(self,nameclass),nameparam, value)

希望有所帮助。