[英]Possible to reload imported dictionaries?
from module import _dict
-> _dict['new_key'] = 1
- 現在,另一個文件中的相同導入使用以前不存在的鍵導入_dict
。 這是運行多個test*.py
文件的pytest
的問題,每個文件都會發生變異_dict
- 例如test_b
導入由_dict
修改的test_a
。
一種解決方法是_dict = copy.deepcopy(_dict)
在變異之前 - 但假設這是不希望的。 importlib.reload(module)
不會重新加載_dict
- 這就是說,有沒有辦法確保原始module._dict
始終被導入?
示例(也是可運行的代碼,沒有 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"])
注意:這個例子不能反映實際的上下文,在這個上下文中我的靈活性要小得多。 我並不是要解決“問題”本身——我的要求在問題的標題中是正確的。 如果它是“不可能的”或者沒有任何東西接近它,那么這就是答案。
您可以使用importlib.reload
function 重新加載模塊。 由於configs
中的_dict
被導入到模塊non_test
中,然后又被導入到test_b
中,因此您應該重新加載non_test
和configs
以便能夠重新實例化新的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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.