¿Puedo sobrescribir la forma de cadena de un grupo con nombre?

Por ejemplo:

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

Lo que quiero es:

 >>> str(s) 90 

Es decir, quiero que la representación de la cadena muestre el atributo de sonoridad. Es posible ?

Sí, no es difícil de hacer y hay un ejemplo para ello en los documentos con nombre .

La técnica es hacer una subclase que agregue su propio método str:

 >>> from collections import namedtuple >>> class Spoken(namedtuple("Spoken", ["loudness", "pitch"])): __slots__ = () def __str__(self): return str(self.loudness) >>> s = Spoken(loudness=90, pitch='high') >>> str(s) '90' 

Puedes definir una función para ello:

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

y asignarlo a __str__ :

 Spoken.__str__ = print_loudness 

Puedes usar código como este:

 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)) 

Esto encajará en una clase de su elección, que luego también sobrecargará la función str.