Форум сайта python.su
0
Читаю сейчас официальную документацию, а именно раздел 6.1.2. String Formatting и там, если я правильно понял, написано, что класс Formatter и его методы позволяют создавать свое собственное поведение форматирования, отличающееся от стандартного. Но как именно это сделать я не понял, по этому, подскажите пожалуйста, приведите пример как это сделать, спасибо.
Офлайн
857
Пример создания своего спецификатора формата.
#!/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]$
#!/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]$
Отредактировано py.user.next (Янв. 6, 2016 17:17:05)
Офлайн
0
py.user.nextКак чаще поступают, просто свой класс создают или пользуются string.Formatter?
Пример создания своего спецификатора формата.
Офлайн
857
yaforeverПереопределяют __format__.
Как чаще поступают, просто свой класс создают
Офлайн