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