Can I overwrite the string form of a namedtuple?

Yes, it is not hard to do and there is an example for it in the namedtuple docs.

The technique is to make a subclass that adds its own str method:

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


You can also used typing.NamedTuple to get the same effect.

from typing import NamedTuple

class Spoken(NamedTuple):
    loudness: int
    pitch: str
    def __str__(self):
        return str(self.loudness)

Leave a Comment