Python中如何在类初始化时使用外部变量设置类属性?
解决方案
方案1:使用实例变量(推荐,适配多实例不同dname场景)
修改script2.py的LAUtils类
将y_path从类变量调整为实例变量,在类的初始化方法中接收dname参数并生成目标路径:
class LAUtils(BBCAPIInfra): def __init__(self, dname): super().__init__() # 必须调用父类初始化方法,保证父类逻辑正常执行 self.y_path = f"/foo/bar/abc/{dname}/pfile.yml"
在script1.py中调用
获取到dname后,创建LAUtils实例时传入该参数,实例的y_path会自动完成初始化:
from foo.bar.script2 import LAUtils class CommonSetup: def some_method(self, local_parameter): dname = call_a_method(local_parameter) # 传入dname创建实例 la_instance = LAUtils(dname) # 此时la_instance.y_path即为目标路径 print(la_instance.y_path) # 示例输出:/foo/bar/abc/MCSX/pfile.yml
方案2:使用类变量(仅适用于全局唯一dname场景)
如果业务中dname是全局唯一的,不需要多个实例使用不同值,可以通过类方法动态更新类变量:
修改script2.py的LAUtils类
class LAUtils(BBCAPIInfra): # 先定义带占位符的类变量 y_path = "/foo/bar/abc/__dname__/pfile.yml" @classmethod def update_y_path(cls, dname): # 替换占位符更新类变量 cls.y_path = cls.y_path.replace("__dname__", str(dname))
在script1.py中调用
获取dname后调用类方法完成更新:
from foo.bar.script2 import LAUtils class CommonSetup: def some_method(self, local_parameter): dname = call_a_method(local_parameter) # 调用类方法更新类变量 LAUtils.update_y_path(dname) # 此时LAUtils.y_path已更新为目标路径 print(LAUtils.y_path) # 示例输出:/foo/bar/abc/MCSX/pfile.yml
注意:方案2中类变量为所有实例共享,一旦更新,所有实例的
y_path都会同步变更,若存在多实例需要不同dname的场景,优先选择方案1。
内容的提问来源于stack exchange,提问作者mac
相关产品推荐
相关产品推荐

