Кажется, вы хотите, чтобы ваши подклассы знали о командной строке, что часто не очень хорошая идея.
Вы хотите инкапсулировать всю входную часть конфигурации вашей программы, чтобы вы могли управлять ей с помощью командной строки, файла конфигурации, другой программы на Python и т. Д.
Итак, я бы удалил любой вызов add_option из ваших подклассов.
Если вы хотите узнать, как выглядят ваши требования к конфигурации во время выполнения, я бы просто добавил эти данные в ваши подклассы; пусть у каждого есть член или метод, который можно использовать, чтобы выяснить, какие входные данные ему нужны.
Затем вы можете пройти через класс организатора ввода, извлечь эти данные и использовать его для запуска командной строки, файла конфигурации или чего-то еще.
Но, честно говоря, мне никогда не приходилось делать это во время выполнения. Я обычно вытаскиваю весь этот конфигурационный материал в свою отдельную вещь, которая отвечает на вопрос «Что пользователь должен сказать инструменту?», А затем подклассы ищут в структуре данных конфигурации то, что ему нужно.