Comment personnaliser le formatage des chaînes de caractères en Python

Vous voulez qu’un objet soutienne le formatage personnalisé par la fonction format() et la méthode str(). Pour personnaliser le formatage des chaînes de caractères, définissez la méthode __format__() sur une classe. Par exemple:

_formats = {
    'ymd' : '{d.year}-{d.month}-{d.day}',
    'mdy' : '{d.month}/{d.day}/{d.year}',
    'dmy' : '{d.day}/{d.month}/{d.year}'
    }

class Date:
    def __init__(self, annee, mois, jour):
        self.annee = annee
        self.mois = mois
        self.jour = jour

    def __format__(self, code):
        if code == '':
            code = 'ymd'
        fmt = _formats[code]
        return fmt.format(d=self)

Les instances de la classe Date prennent désormais en charge des opérations de formatage telles que les suivantes:

>>> d = Date(2018, 12, 21)
>>> format(d)
'2018-12-21'
>>> format(d, 'mdy')
'12/21/2018'
>>> 'Date: {:ymd}'.format(d)
'Date: 2018-12-21'
>>> 'Date: {:mdy}'.format(d)
'Date: 12/21/2018'
>>>

La méthode __format__() fournit un hook dans la fonctionnalité de formatage des chaînes de caractères de Python.

Il est important de souligner que l’interprétation des codes de format dépend entièrement de la classe elle-même. Ainsi, les codes peuvent être presque n’importe quoi. Par exemple, considérez ce qui suit à partir du module datetime:

>>> from datetime import date
>>> d = date(2018, 12, 21)
>>> format(d)
'2018-12-21'
>>> format(d,'%A, %B %d, %Y')
'Friday, December 21, 2018'
>>> 'La fin est {:%d %b %Y}. Goodbye'.format(d)
'La fin est 21 Dec 2018. Goodbye'
>>>

Il existe des conventions standard pour le formatage des types intégrés. Reportez-vous à la documentation du module string pour une spécification formelle.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here