Можно ли перезаписать строковую форму namedtuple?
Например:
>>> Spoken = namedtuple("Spoken", ["loudness", "pitch"])
>>> s = Spoken(loudness=90, pitch='high')
>>> str(s)
"Spoken(loudness=90, pitch='high')"
Я хочу:
>>> str(s)
90
То есть я хочу, чтобы строковое представление отображало атрибут громкости.
Возможно ли это?
Ответы
Ответ 1
Да, это не сложно сделать, и есть пример для него в namedtuple docs.
Метод заключается в создании подкласса, который добавляет свой собственный метод 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'
Ответ 2
Вы можете определить для него функцию:
def print_loudness(self):
return str(self.loudness)
и назначьте его __str__
:
Spoken.__str__ = print_loudness
Ответ 3
вы можете использовать такой код:
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))
Это приведет к переносу namedtuple в класс по вашему выбору, который затем перегружает функцию str.