Является ли плохой практикой (антишаблоном) предоставлять модуль в качестве аргумента при инициализации класса?

#python #python-3.x

#python #python-3.x

Вопрос:

Я реализовал BaseScanner внутри common/base/scanner.py , то есть подклассы Scanner внутри stash/scanner.py , jira/scanner.py и т.д.

Теперь проблема в том, что BaseScanner необходимо получить доступ к моделям ORM, например, в stash/db/models.py , в зависимости от того, где это подклассы (в stash , jira и т.д.):

 # common package
common/base/scanner.py

# stash package
stash/scanner.py
stash/db/models.py

# jira package
jira/scanner.py
jira/db/models.py
...
  

Является ли антишаблоном предоставление модуля в качестве аргумента классу при его создании, как я делаю здесь в main.py ?

 import stash, jira
...
if args.command == 'stash':
   import stash.db.models as models
   scanner = jira.Scanner(args, models, ...)
   scanner.run()
  
  

а затем получать доступ к различным моделям ORM изнутри BaseScanner , например self.models.Scan , self.models.Match и т.д.?

Если это анти-шаблон, каким может быть альтернативное решение?

Комментарии:

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

2. @Code-Apprentice — спасибо за ваш комментарий. Можете ли вы придумать лучший способ сделать это?

3. Почему бы не импортировать правильную модель в каждый файл сканера?

4. @DeepSpace — базовый класс не знает, что импортировать