Подкласс Python str с ленивой оценкой его значения (для argparse)Python

Программы на Python
Anonymous
Подкласс Python str с ленивой оценкой его значения (для argparse)

Сообщение Anonymous »

Я создаю программу командной строки, использующую argparse.
В (предполагаемом) редком случае неправильного вызова argparse покажет предоставленную строку описания при создании ArgumentParser.
Я хочу, чтобы в этом описании отображался номер версии моей программы.
Я хочу извлечь его из pyproject.toml файл через tomllib.
Поскольку это дорогостоящая операция (и тем более, поскольку я хочу научиться ее делать), Я бы хотел, чтобы строка описания оценивалась лениво: только когда его действительно нужно напечатать.
Я еще не нашел способа сделать это, хотя я готов создать простой объект, специализированный для этого. особая ценность:
  • Код: Выделить всё

    collections.UserString
    может обеспечить отложенную оценку (путем переопределения __getattribute__ для атрибута data), но, увы, некоторый код в argparse использует re.sub() для it, который, по-видимому, проверяет isinstance(x, str), что UserString не выполняет.
  • подкласс str может переопределить любой операция, выполняемая над строкой, но не выполняющая ленивую оценку для простого использования всей строки. (Правда ли это?)
  • если ArgumentParser будет использовать str(description) вместо описания, когда он собирается напечатать описание, один может предоставить объект, выполняющий отложенную оценку, в своем методе __str__. Но, увы, ArgumentParser этого не делает.
Есть ли какой-нибудь подход, который справится с этой задачей?

Подробнее здесь: https://stackoverflow.com/questions/788 ... r-argparse

Вернуться в «Python»