Если нет желание углубляться в детали: Хочу написать ф-цию, которая на вход будет принимать строку, обрабатывать её и в зависимости от результата обрабоки вызывать конкретную функцию с конкретными аргументами. То, что уже делал - описал в подробностях в спойлере. Как бы вы реализовали командную оболочку ? Spoiler: Детали Я пишу консольное приложение, которое выводит в консоль погоду в определённом городе. Есть класс готовый класс weather, в котором реализовано создание нового экземпляра (метод __init__) Spoiler отправка запроса к api обработка ответа, учитывая код статуса ответа инициализирование переменных экземпляра данными, полученными из запроса Я хочу написать командную оболочку, которую было бы удобно масштабировать под любой другой проект, но в данном случае под класс. Методы класса будут дописываться --> команды в оболочку будут добавляться. Через эту оболочку должны вызываться другие ф-ции или методы класса конкретно в данном случае. Возможно, я неправильно использую терминологию - под оболочкой я подразумеваю такую функцию, которая в бесконечном цикле считывает строку, пока не встретит команду выхода из программы и будет вызвана ф-ция quit(). Считав строку, функция пытается интерпретировать её как команду и аргументы. Далее вызывается нужная функция с данными аргументами. Я делал это вот так: Spoiler: Code 1 Code: #Это кусок из этой же программы, только другой версии lang = None def command(): global lang com = input('>>> ').split() if com[0] == 'quit': quit() elif com[0] == 'current': for i in range(2, len(com)): com[1] = com[1] + ' ' + com[i] current(com[1], lang) elif com[0] == 'lang': lang = com[1] else: print('Invalid command') Имхо, такой метод (когда ф-ция последовательно проверяет условие) можно применять при построении любой простой оболочки. Но он просто ужасен и его неудобно масштабировать. Я подумал, что можно это реализовать примерно вот так Spoiler: Code 2 Code: d = {'com1' = func1(), 'com2': func2()} def command(): global d com = input('>>> ') #манимуляции return d.get(com, 'Invalid command') То есть сначала определяется словарь {'имя команды': функция} отдельно пишутся все функции так же, как и в первом варианте - строка считывается и из неё нужно вытащить ключевые слова, которые будут аргументами com и остальными аргументами, нужными для конкретной функции. Но если подумать, то это тоже достаточно сложно и требует доработок, тк в именно таком виде функции внутри словаря не работают. Ну и что я в результате хочу спросить: - как бы вы реализовывали командную оболочку ? - что вы думаете по поводу варианта со словарём ?
Так, ну на Тостере мне порекомендовали встроенный микрофеймворк Cmd https://docs.python.org/3/library/cmd.html. Это очень крутая вещь. Вопрос как бы и решен но не закрыт)
вот тут посмотри. https://www.tutorialspoint.com/python_design_patterns/python_design_patterns_command.htm и вообще все архитектурные решения описаны в паттернах . https://ru.wikipedia.org/wiki/Шаблон_проектирования фреймворк не всегда хорошо. например когда тебе надо 1-3 команды то нет смысла тянуть лишние зависимости.