кор Прямоугольник путь для достижения этой цели, вероятно, будет подкласс string.Formatter класса и использовать его экземпляр вместо метода строки:
from string import Formatter
class IncrementalFormatter(Formatter):
pass # your implementation
f = IncrementalFormatter()
f.format("hello {name}", name="Tom")
Следующих Formatter
методов должны были бы быть перезаписаны:
get_value()
должен возвращать некоторые специальный объект вместо повышения LookupError
.
get_field()
должен сохранить аргумент field_name
в этот объект (или продолжать нормально, если объект не является нашим специальным объектом).
convert_field()
должен просто сохранить аргумент conversion
в этот объект и не преобразовывать (или продолжать нормально ...).
format_field()
должен восстановить строку формата поля из специального объекта, используя его атрибуты field_name
и conversion
и аргумент format_spec
этого метода (или продолжить нормально ...).
Так, например:
f.format("{greet} {who.name!r:^16s}", greet="hello")
должно привести к "hello {who.name!r:^16s}"
, где "who.name"
является field_name
, "r"
является conversion
, "^16s"
является format_spec
и все эти три значения были вновь объединены обратно в "{who.name!r:^16s}"
, так что его можно использовать в следующем проходе форматирования.
Дополнительный примечание: специальный объект должен возвращаться при доступе к любому атрибуту (с .
) или изделием (с []
).
Можете ли вы дать более ясный пример, чтобы продемонстрировать, что вы хотите? Ваш вопрос непонятен. –