导入后将全局范围内的变量提供给类

时间:2019-04-02 15:04:10

标签: python python-3.x import

我试图避免重构类。目前,它从全局范围中拾取来自argparse的“ args”,但是当我将此类导入unittest时,当然不存在args。导入后是否可以使该变量对类可用?在if __name__ == "__main__":行下方的unittest文件中重新创建变量并不难。但是导入的类缺少该变量。是否可以通过__dict__或其他技巧将其插入其中?

一个简单的解决方案是在实例化时将此变量显式地放入__init__中,而不是从全局范围中选取它。重构之前,我想先检查一下导入后是否有办法将其导入,通常是从全局范围导入的。干杯。

1 个答案:

答案 0 :(得分:1)

如您所建议,更新__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