为了账号安全,请及时绑定邮箱和手机立即绑定

导入后使全局范围内的变量可用于类

导入后使全局范围内的变量可用于类

神不在的星期二 2021-12-26 14:43:19
我试图避免重构一个类。目前它从全局范围内获取来自 argparse 的“args”,但是当我将这个类导入 unittest 时,当然 args 不存在。导入后是否可以将此变量提供给类?在该if __name__ == "__main__":行下方的 unittest 文件中重新创建变量并不难。但是导入的类缺少该变量。是否有可能以某种方式将其放入__dict__ 或使用其他技巧?一个简单的解决方案是让这个变量显式地进入__init__实例化时,而不是从全局范围中获取它。在重构之前,我想首先检查是否有办法在导入后将它放入那里,当它通常从全局范围进入时。干杯。
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

正如您所建议的,更新__dict__可能是一种解决方案。如果您的代码与此类似:


file1.py:


class Class:

    def foo(self):

        print(args)



if __name__ == '__main__':

    args = 'args'

    c = Class()

    c.foo()  # OK

file.2py:


import file1


c = file1.Class()

c.foo()  # will raise NameError

然后file1.__dict__['args'] = 'args'在导入后做file1:


import file1


file1.__dict__['args'] = 'args'


c = file1.Class()

c.foo()  # will print args without errors


查看完整回答
反对 回复 2021-12-26
  • 1 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信