В (предполагаемом) редком случае неправильного вызова argparse покажет предоставленную строку описания при создании ArgumentParser.
Я хочу, чтобы в этом описании отображался номер версии моей программы.
Я хочу извлечь его из pyproject.toml файл через tomllib.
Поскольку это дорогостоящая операция (и тем более, поскольку я хочу научиться ее делать), Я бы хотел, чтобы строка описания оценивалась лениво: только когда его действительно нужно напечатать.
Я еще не нашел способа сделать это, хотя я готов создать простой объект, специализированный для этого. особая ценность:
- может обеспечить отложенную оценку (путем переопределения __getattribute__ для атрибута data), но, увы, некоторый код в argparse использует re.sub() для it, который, по-видимому, проверяет isinstance(x, str), что UserString не выполняет.
Код: Выделить всё
collections.UserString - подкласс str может переопределить любой операция, выполняемая над строкой, но не выполняющая ленивую оценку для простого использования всей строки. (Правда ли это?)
- если ArgumentParser будет использовать str(description) вместо описания, когда он собирается напечатать описание, один может предоставить объект, выполняющий отложенную оценку, в своем методе __str__. Но, увы, ArgumentParser этого не делает.
Подробнее здесь: https://stackoverflow.com/questions/788 ... r-argparse