我试图避免重构类。目前,它从全局范围中拾取来自argparse的“ args”,但是当我将此类导入unittest时,当然不存在args。导入后是否可以使该变量对类可用?在if __name__ == "__main__":
行下方的unittest文件中重新创建变量并不难。但是导入的类缺少该变量。是否可以通过__dict__
或其他技巧将其插入其中?
一个简单的解决方案是在实例化时将此变量显式地放入__init__
中,而不是从全局范围中选取它。重构之前,我想先检查一下导入后是否有办法将其导入,通常是从全局范围导入的。干杯。
答案 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