Я пытаюсь выяснить, как система импорта python связывает зависимости модуля, импортируемого с помощью ключевого слова from.
В частности, в моем сценарии использования пишутся операторы unittest.mock.patch для насмешливых атрибутов объекта, который импортируется с использованием «from», и этот объект использует что-то, импортированное из другого модуля. Однако в более широком смысле я просто хочу понять, как работает система импорта.
Мой вопрос может иметь больше смысла с примером:
Предположим, у нас есть некоторый класс A в некотором модуле a, который использует класс из модуля b
a.py:
from b import B
class A:
def __init__(self):
B.use_some_static_method()
# OR
self.b_instance = B()
Тогда, например, в некотором тестовом коде мы хотим смоделировать B при тестировании нашего объекта A. Как бы я написал заявление о патче?
test_a.py:
from a import A
def test_a(mocker):
# Mock with pytest-mock's mocker
mock_b = mocker.patch('<some path>')
a = A()
a.do_something_with_B()
Какой путь я бы выбрал вместо? Я понимаю, что вместо этого могу просто использовать import a
, а затем смоделировать a.B
, но меня больше интересует понимание системы импорта и того, как она работает и почему она работает таким образом.