from module import _dict
-> _dict['new_key'] = 1
- и теперь тот же импорт в другом файле импортирует _dict
с ранее несуществующим ключом. Это проблема с pytest
, который запускает несколько test*.py
файлов, каждый мутирует _dict
- например, test_b
import _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"])
Примечание : пример не отражает фактического контекста, в котором у меня гораздо меньше гибкости. Я не прошу решения самой проблемы - то, что я спрашиваю, прямо в названии вопроса. Если это «невозможно» или нет ничего близкого к этому, то это ответ.