Подтвердить что ты не робот

Python - "импортировать" или передавать модули в качестве параметров?

Мне было интересно, может ли пропустить объекты модуля к классу или объекту, который требует его, а не при использовании import, может быть плохой идеей, так как он избегает жестких зависимостей этих модулей.

Мне было интересно узнать, знает ли кто-нибудь о Python Zen, чем я мог бы объяснить, почему это ужасная/не страшная идея?

4b9b3361

Ответ 1

То, о чем вы говорите, называется инъекцией зависимостей и считается хорошей практикой для проверки вашего кода. Я ничего не думаю о Python, который сделает его непитоновым или плохой практикой.

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

class Foo(object):
    def __init__(self, testing=False):
        if testing:
            import module_test as module
        else:
            import module
        self.module = module

Но передача ссылки на модуль, который вы хотите использовать, более гибкая, лучше отделяет проблемы и не менее Pythonic, чем передача ссылки на класс или экземпляр (или строку или целое число), которые вы хотите использовать.

Для обычного (не-тестового) варианта использования вы можете использовать значение аргумента по умолчанию:

class Foo(object):
    def __init__(self, module=None):
        if not module:
            import module
        self.module = module

Ответ 2

Если рассматриваемый класс может использовать один из нескольких разных модулей, то имеет смысл передать тот, который вы хотите использовать.

В любой ситуации, с которой я столкнулся до сих пор, необходимые модули необходимы, поэтому использование import было бы предпочтительным.