Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 6, 2016 17:05:19

yaforever
Зарегистрирован: 2015-07-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

класс Formatter

Читаю сейчас официальную документацию, а именно раздел 6.1.2. String Formatting и там, если я правильно понял, написано, что класс Formatter и его методы позволяют создавать свое собственное поведение форматирования, отличающееся от стандартного. Но как именно это сделать я не понял, по этому, подскажите пожалуйста, приведите пример как это сделать, спасибо.

Офлайн

#2 Янв. 6, 2016 17:15:42

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

класс Formatter

Пример создания своего спецификатора формата.

#!/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]$



Отредактировано py.user.next (Янв. 6, 2016 17:17:05)

Офлайн

#3 Янв. 7, 2016 13:57:00

yaforever
Зарегистрирован: 2015-07-04
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

класс Formatter

py.user.next
Пример создания своего спецификатора формата.
Как чаще поступают, просто свой класс создают или пользуются string.Formatter?

Офлайн

#4 Янв. 7, 2016 14:59:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

класс Formatter

yaforever
Как чаще поступают, просто свой класс создают
Переопределяют __format__.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version