Python:如何通过字符串调用函数更新类实例变量?
问题分析与解决方案
你这段代码的核心问题是:在baz方法里,你通过globals()["foo"]()创建了一个全新的foo实例,调用这个新实例的bar方法只会修改它自己的val,和当前执行baz的foo实例完全无关。
只需要修改baz方法,直接从当前实例(self)中获取目标方法即可:
def baz(self): # 获取当前foo实例对应的目标方法 target_func = getattr(self, self.e.func) target_func()
完整可运行的代码示例:
class a: def __init__(self): self.func = "bar" class foo: def __init__(self): self.val = 0 self.e = a() def bar(self): self.val += 1 def baz(self): target_func = getattr(self, self.e.func) target_func() # 测试验证 f = foo() print(f.val) # 输出:0 f.baz() print(f.val) # 输出:1
逻辑说明
getattr(self, self.e.func):从当前执行baz的foo实例(也就是self)中,取出名为self.e.func(即字符串"bar")的方法- 调用该方法时,方法内部的
self指向的就是当前的foo实例,因此self.val += 1会正确修改当前实例的val属性
内容的提问来源于stack exchange,提问作者baofu
相关产品推荐
相关产品推荐

