Пример создания своего спецификатора формата.
#!/usr/bin/env python3
# пример изменения спецификаторов формата объекта
import re
class Int(int):
def __format__(self, spec):
match = re.match(r'x(\d*)', spec)
if match:
g = match.group(1)
n = (g and int(g)) or 1
return n * str(self)
return super().__format__(spec)
i, j, k = map(Int, (1, 2, 3))
s = '{:x3} {:x6} {:x9}'.format(i, j, k)
print(s)
[guest@localhost fmtr]$ ./formatter3.py
111 222222 333333333
[guest@localhost fmtr]$
Если нужен именно string.Formatter
#!/usr/bin/env python3
# пример создания форматировщика
import string
class MyFmt(string.Formatter):
def format_field(self, v, spec):
if spec == 'd':
return '<' + '.' * v + '>'
return string.Formatter.format_field(self, v, spec)
mf = MyFmt()
print(mf.format('n = {0:#b}, n = {0:d}', 8))
[guest@localhost fmtr]$ ./formatter4.py
n = 0b1000, n = <........>
[guest@localhost fmtr]$