簡體   English   中英

可以重新加載導入的字典嗎?

[英]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_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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM