例如下面的例子:
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()
我想要做的是获取A
中C
类的attribut essai
的引用。关键是我想使用该引用来更新方法C.A
中modify_val
的值。通过使用包含类和我想要修改的属性(mystring = 'C.A'
)的字符串,我不明白我如何获得对该属性的引用(例如C.A
)以及我如何可以使用该引用来修改属性。在我的示例中,modify_val
函数不会更新C.A
值,因为Ref
实际上不是引用。
因此我得到:
C A
1.0
1.0
1.0
我希望最后一次打印为2
答案 0 :(得分:2)
我建议使用setattr(object, name, value)
来自setattr
的python文档setattr(对象,名称,值)
这是getattr()的对应物。参数是一个对象,一个 字符串和任意值。该字符串可以命名现有的 属性或新属性。该函数将值赋给 属性,只要对象允许它。例如,setattr(x, 'foobar',123)相当于x.foobar = 123。
将nameclass
和nameparam
直接传递给modify_val
,您应该可以执行以下操作:
def modify_val(self, nameclass, nameparam, value)
setattr(getattr(self,nameclass),nameparam, value)
希望有所帮助。