Как мне сделать рекомендуемый метод ленивого импорта в python unittest doc? - PullRequest
0 голосов
/ 29 октября 2018

Документы Python говорят, что существует альтернатива локальному импорту для предотвращения загрузки модуля при запуске:

https://docs.python.org/3/library/unittest.mock-examples.html#mocking-imports-with-patch-dict

... для предотвращения «первоначальных затрат» путем задержки импорта. Это также может быть решено лучше, чем безусловный локальный импортировать (сохранить модуль как класс или атрибут модуля и сделать только импорт при первом использовании).

Я не понимаю объяснения в скобках. Как мне это сделать? Как бы то ни было, я все равно думаю, что все равно получаю местный импорт.

1 Ответ

0 голосов
/ 29 октября 2018

Документация, вероятно, относится к использованию importlib.import_module, который раскрывает функциональность Python import:

import importlib

class Example():

    TO_IMPORT = "os"  # the name of the module to lazily import
    __module = None

    def __init__(self):
        if self.__module is None:
            self.__module = importlib.import_module(self.TO_IMPORT)

Обратите внимание, что таким образом модуль импортируется только один раз, когда экземпляр класса создается впервые и недоступен в глобальном пространстве имен.

Кроме того, он позволяет изменить импортируемый модуль, что может быть полезно, например, в тех случаях, когда один и тот же класс используется в качестве интерфейса к различным бэкэндам:

import importlib

class Example():

    def __init__(self, backend="some_module"):
        self.module = importlib.import_module(backend)
...