Python >> Tutoriel Python >  >> Python

Méthode magique Python __format__()

Syntaxe

object.__format__(self, spec)

Le Python __format__() la méthode implémente le format() intégré fonction ainsi que le string.format() méthode. Ainsi, lorsque vous appelez le format(x, spec) ou string.format(spec) , Python tente d'appeler x.__format__(spec) . La valeur de retour est une chaîne.

Nous appelons cela une "méthode Dunder" pour "D ouble Sous Méthode de score" (également appelée "méthode magique" ). Pour obtenir une liste de toutes les méthodes de dunder avec des explications, consultez notre article sur la feuille de triche de dunder sur ce blog.

Format d'arrière-plan()

format(value, spec) intégré de Python La fonction transforme l'entrée d'un format en sortie d'un autre format défini par vous.

Plus précisément, il applique le spécificateur de format spec à l'argument value et renvoie une représentation formatée de value .

Par exemple, format(42, 'f') renvoie la représentation sous forme de chaîne '42.000000' .

Exemple de __format__() personnalisé

Dans l'exemple suivant, vous créez une classe personnalisée Data et écrasez le __format__() méthode magique pour qu'elle renvoie une chaîne factice 'hello world' .

class Data:
    def __format__(self, spec):
        return 'hello ' + spec


x = Data()
print(format(x, 'world'))

De cette façon, vous pouvez créer votre propre petit langage de formatage pour un objet personnalisé.

class Data:
    def __format__(self, spec):
        if spec == '42':
            return 'finxter'
        return 'hello ' + spec
    

x = Data()

print(format(x, 'world'))
# hello world


print(format(x, '42'))
# finxter

Dans le premier print() instruction, vous utilisez le spécificateur de format 'world' qui n'a pas de signification particulière dans votre implémentation personnalisée du __format__() méthode. Ainsi, la sortie est 'hello world' —le résultat de la concaténation de chaînes 'hello' et le spécificateur de format 'world' .

Au deuxième print() , vous utilisez le spécificateur de format spécial (selon votre propre définition) '42' . Le __format__() renvoie maintenant une chaîne spéciale :‘finxter’ !

Références :

  • https://docs.python.org/3/reference/datamodel.html
  • Python format() Fonction :Guide No-BS par exemple
  • Chaîne Python format()
  • Formatage des chaînes :restez simple, stupide !

Vidéo associée :Méthodes de chaîne Python

La vidéo suivante peut vous aider à comprendre certaines méthodes de chaîne cruciales, telles que le str.format() méthode qui s'appuie sur le __format__() méthode magique !