猿问

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

我试图避免重构一个类。目前它从全局范围内获取来自 argparse 的“args”,但是当我将这个类导入 unittest 时,当然 args 不存在。导入后是否可以将此变量提供给类?在该if __name__ == "__main__":行下方的 unittest 文件中重新创建变量并不难。但是导入的类缺少该变量。是否有可能以某种方式将其放入__dict__ 或使用其他技巧?

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


神不在的星期二
浏览 133回答 1
1回答

jeck猫

正如您所建议的,更新__dict__可能是一种解决方案。如果您的代码与此类似:file1.py:class Class:    def foo(self):        print(args)if __name__ == '__main__':    args = 'args'    c = Class()    c.foo()  # OKfile.2py:import file1c = file1.Class()c.foo()  # will raise NameError然后file1.__dict__['args'] = 'args'在导入后做file1:import file1file1.__dict__['args'] = 'args'c = file1.Class()c.foo()  # will print args without errors
随时随地看视频慕课网APP

相关分类

Python
我要回答