Межмодульная связь с Pub-Sub в Python - PullRequest
0 голосов
/ 17 декабря 2018

Я занимаюсь разработкой приложения интерфейса командной строки (CLI) на Python.Он состоит из точки входа cli.py , которая определяет синтаксический анализатор CLI, используя argparse .Существует также пакет command , который содержит несколько модулей, расширяющих синтаксический анализатор CLI с помощью соответствующих подкоманд

app
|    cli.py
|____commands
     |    __init.py__
     |    sub_command1.py
     |    sub_command2.py

Мой первоначальный подход заключался в определении функции register_subcommand в каждом подкомандном модуле и вызовите каждый из них в cli.py .Поскольку это было немного многословно, и я хотел иметь возможность подключать подкоманду без изменения других файлов, я выбрал другой подход

В настоящее время я использую Pub-Sub для регистрации CLI для подкоманди призвать их.Преимущество заключается в том, что вы можете просто вставить субмодуль.Однако теперь импорт модулей выглядит странно, поскольку импорт не используется и предназначен только для побочных эффектов (регистрация подмодулей).

#  cli.py (this is just a template, not working code)
import app.commands # unused import

parser = argparse.ArgumentParser()
publish_event('register_subcommand', parser)
args = parser.parse_args()
publish_event('execute_subcammnd', args)

# sub-command1.py
@subscribe('register_sub_modules')
def register_subcommand(parser):
    pass

@subscribe('execute_subcammnd')
def execute_subcommand(args):
    pass

# __init__.py
# Imports all sub_command modules in the package

Это плохая практика в Python в целом?Каковы недостатки?Есть ли лучший дизайн для достижения этой цели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...