gpt4 book ai didi

python - 导入后使全局范围内的变量可供类使用

转载 作者:行者123 更新时间:2023-12-01 08:07:17 24 4
gpt4 key购买 nike

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

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

最佳答案

正如您所建议的,更新 __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后执行file1.__dict__['args'] = 'args':

import file1

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

c = file1.Class()
c.foo() # will print args without errors

关于python - 导入后使全局范围内的变量可供类使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55477948/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com