Как импорт в стиле 'from' обрабатывает зависимости импортированного модуля? - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь выяснить, как система импорта 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, но меня больше интересует понимание системы импорта и того, как она работает и почему она работает таким образом.

...