44 votes

Puis-je écraser la forme de chaîne d'un tuple nommé ?

Par exemple:

 >>> Spoken = namedtuple("Spoken", ["loudness", "pitch"])
>>> s = Spoken(loudness=90, pitch='high')
>>> str(s)
"Spoken(loudness=90, pitch='high')"

Ce que je veux c'est :

 >>> str(s)
90

C'est-à-dire que je veux que la représentation de la chaîne affiche l'attribut de volume sonore. Est-ce possible ?

17voto

Björn Pollex Points 41424

Vous pouvez lui définir une fonction :

 def print_loudness(self):
    return str(self.loudness)

et l'affecter à __str__ :

 Spoken.__str__ = print_loudness

4voto

Serdalis Points 5376

vous pouvez utiliser un code comme celui-ci :

 from collections import namedtuple

class SpokenTuple( namedtuple("Spoken", ["loudness", "pitch"]) ):

    def __str__(self):
        return str(self.loudness)

s = SpokenTuple(loudness=90, pitch='high')

print(str(s))

Cela enveloppera namedtuple dans une classe de votre choix que vous surchargerez ensuite également la fonction str.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X