Есть у меня, братцы, скрипт, который кушает себе на вход пригоршню аргументов командной строки с помощью argparse:
parser = argparse.ArgumentParser(description='Simulator proxy example')
parser.add_argument("--baseline", "-bl", type=str2bool, default=False,
help="Run baseline scenario (non-fullbuffer, MEDIUM traffic, CORRELATION scheduler)")
parser.add_argument("--config-path", "-cp", type=str, default=None,
help="Path to MATLAB .m config file for UNN SLS")
parser.add_argument("--dump-path", "-dp", type=str, default=None,
help="Explicitly sets path to dump folder (value from .m config will be read otherwise)")
parser.add_argument('--fullbuffer', '-fb', type=str2bool, default=True,
help="Use fullbuffer traffic mode")
parser.add_argument("--parallel-scheduling", "-ps", type=str2bool, default=False,
help="Run scheduling for each of 3 sectors in parallel process")
Всё бы хорошо: и значения-по-умолчанию прописать можно, и типы данных, ну и указать какие аргументы надо явно задавать. Одно западло: это предназначено именно для работы с аргументами командной строки.
А я хочу отрефакторить код моего скрипта, вынеся его в отдельную функцию. Которую вызывать себе из основного Python-процесса (в идеале, безо всяких лишних костылей вроде os.subprocess). И для этого мне бы не помешал аналогичный класс, только для описания конфигов. Чтобы я мог из своего питоньего кода поставить аргументы какие нужны.
Нужно, что-то в таком же духе, как в SqlAlchemy поля в таблице описывают:
class SimulatorConfig(BaseConfig):
random_seed = Column(Integer, default=33, help="Random seed for simulation")
matlab_config_path = Column(String, short_name="cp", default=None, help="Path to MATLAB config file for MATLAB part of simulation")
...
Из этого потом можно хоть argparse сгенерить, хоть ещё чего. Хоть непосредственно в коде прописать нужные поля – и радоваться жизни.
Можно самому склепать подобное, только это надо метаклассы осиливать, заморачиваться, и вообще велосипедизмом заниматься.