Найти - Пользователи
Полная версия: класс Formatter
Начало » Python для новичков » класс Formatter
1
yaforever
Читаю сейчас официальную документацию, а именно раздел 6.1.2. String Formatting и там, если я правильно понял, написано, что класс Formatter и его методы позволяют создавать свое собственное поведение форматирования, отличающееся от стандартного. Но как именно это сделать я не понял, по этому, подскажите пожалуйста, приведите пример как это сделать, спасибо.
py.user.next
Пример создания своего спецификатора формата.
#!/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]$
yaforever
py.user.next
Пример создания своего спецификатора формата.
Как чаще поступают, просто свой класс создают или пользуются string.Formatter?
py.user.next
yaforever
Как чаще поступают, просто свой класс создают
Переопределяют __format__.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB