gpt4 book ai didi

python - 可以重新加载导入的字典吗?

转载 作者:行者123 更新时间:2023-12-04 16:45:50 25 4
gpt4 key购买 nike

from module import _dict -> _dict['new_key'] = 1 - 现在,另一个文件中的相同导入导入 _dict使用以前不存在的 key 。这是pytest的问题运行多个 test*.py文件,每个都在变异 _dict - 所以例如test_b进口_dicttest_a 修改.

解决方法是 _dict = copy.deepcopy(_dict)在变异之前 - 但假设这是不想要的。 importlib.reload(module)不会重新加载 _dict - 话说,有没有办法保证原来的module._dict总是进口?

示例 (还有 runnable code ,没有 pytest)。

# configs.py
_dict = {'a': 1, 'b': 2}

# non_test.py
from configs import _dict

class SomeClass():
def __init__(self, a=None, b=None):
self.a = a or _dict['a']
self.b = b or _dict['b']
del _dict['a']

# test_a.py
def test_class():
SomeClass()

# test_b.py
def test_class():
SomeClass()

每个 test*.py具有以下“页眉”和“页脚”:

import pytest
from non_test import SomeClass
# test_*()
if __name__ == '__main__':
pytest.main([__file__, "-s"])

注意:该示例并未反射(reflect)实际上下文,在其中我的灵活性要低得多。我不是在寻求“问题”本身的解决方案 - 我问的问题在问题的标题中是正确的。如果它是“不可能的”或者没有任何接近它的东西,那么这就是答案。

最佳答案

您可以使用 importlib.reload 重新加载模块的函数。自 _dict来自 configs导入模块 non_test ,然后将其导入 test_b ,您应该重新加载 non_testconfigs能够重新实例化一个新的 configs._dict并将其重新导入 non_test :

# test_b.py
import non_test
import configs
import importlib
importlib.reload(non_test)
importlib.reload(configs)

def test_class():
SomeClass()

演示: https://repl.it/@blhsing/SaneDesertedMode

关于python - 可以重新加载导入的字典吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61087280/

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