Стоит ли пересылать аргументы как * args & ** kwargs? - PullRequest
2 голосов
/ 25 августа 2009

У меня есть класс, который обрабатывает аргументы командной строки в моей программе с помощью модуля optparse python. Он также наследуется несколькими классами для создания подмножеств параметров. Чтобы инкапсулировать механизм разбора опций, я хочу показать только функцию add_option наследующим классам. Затем эта функция вызывает optparse.make_option.

Полезно ли просто, чтобы мой метод add_option говорил, что он принимает те же аргументы, что и optparse.make_option в документации, и передает аргументы как *args и **kwargs?

Должен ли я заранее проверить некоторые параметры? В некотором смысле, я хочу избежать этого, чтобы отделить этот кусок кода от конкретной версии optparse.

Ответы [ 2 ]

1 голос
/ 25 августа 2009

Кажется, вы хотите, чтобы ваши подклассы знали о командной строке, что часто не очень хорошая идея.

Вы хотите инкапсулировать всю входную часть конфигурации вашей программы, чтобы вы могли управлять ей с помощью командной строки, файла конфигурации, другой программы на Python и т. Д.

Итак, я бы удалил любой вызов add_option из ваших подклассов.

Если вы хотите узнать, как выглядят ваши требования к конфигурации во время выполнения, я бы просто добавил эти данные в ваши подклассы; пусть у каждого есть член или метод, который можно использовать, чтобы выяснить, какие входные данные ему нужны.

Затем вы можете пройти через класс организатора ввода, извлечь эти данные и использовать его для запуска командной строки, файла конфигурации или чего-то еще.

Но, честно говоря, мне никогда не приходилось делать это во время выполнения. Я обычно вытаскиваю весь этот конфигурационный материал в свою отдельную вещь, которая отвечает на вопрос «Что пользователь должен сказать инструменту?», А затем подклассы ищут в структуре данных конфигурации то, что ему нужно.

0 голосов
/ 25 августа 2009

Вы уверены, что подклассы - это то, что вы хотите делать? Ваше переопределение может быть просто реализовано в функции.

...