Relrin
@Relrin

Как лучше производить инициализацию «внутренних» объектов?

У меня имеется некий класс Application, в котором внутри определен ряд объектов, описывающих непосредственно само приложение: набор роутов + вьюшки для них. Естественно сделать еще поддержку middlewar'ов, чтобы до вызова нужного обработчика для запроса, выполнить ряд действий по предобработке (например, токен проверить/добавить). Для этих middlewar'ов мне нужна инициализация, которая бы, например, брала или пользовательские настройки (если определены), либо дефолтовые, которые я укажу (например хранить где-нибудь в памяти токены, если пользователь не хочет хранить в БД (или не указал)).

Вопрос в том, как решить красиво и элегантно данную задачу? У меня пока пришло в голову:
1) Пробрасывать аргументы пришедшие в Application класс, а от него, внутрь, в глубину (то есть все конструкторы имеют сигнатуру:
def __init__(self, *args, **kwargs):
  # берем какие-то настройки из аргументов/словаря и делаем нужное
  ....

что на текущий момент времени сделано, но не сказать что абсолютно меня полностью удолетворяет.
2) Сделать нечто наподобие механизма настроек как в Django (имеются какие-то дефолтовые настройки + пользовательские). Вроде бы и круто, но тогда надо и писать свой скрипт, через который пользователь будет ранить свой скрипт (опять же, как джанге), вместо того, чтобы просто запустить у себя скрипт, в котором есть:
if __name__ == '__main__':
    cmd = CommandLine()
    cmd.define('-ip', default='127.0.0.1', help='used ip', type=str)
    cmd.define('-port', default=8080, help='listened port', type=int)
    args = cmd.parse_command_line()

    app = Application()
    app.run(ip=args.ip, port=args.port, router=router)

Подскажите, какой способ реализации оптимальнее/лучше и почему. Быть может есть какие-то еще более интересные варианты?
  • Вопрос задан
  • 258 просмотров
Пригласить эксперта
Ответы на вопрос 1
profesor08
@profesor08
пользователь будет ранить свой скрипт

Бинт посоветую.

Надо передать настройки? Передайте их как аргумент функции. Все.
Либо грузите с файла. Все.
Либо грузите откуда хотите.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы