[英]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_val
的CA
值。 通过使用包含要修改的类和属性的字符串( 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。
通过直接将nameclass
和nameparam
传递给modify_val
您应该可以执行以下操作:
def modify_val(self, nameclass, nameparam, value)
setattr(getattr(self,nameclass),nameparam, value)
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.