繁体   English   中英

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

[英]How modify a class attribute through a reference of it?

例如以下示例:

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()

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

C A
1.0
1.0
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)

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM