Можно ли перезаписать строковую форму namedtuple?

Например:

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

Я хочу:

 >>> str(s) 90 

То есть, я хочу, чтобы строковое представление отображало атрибут громкости. Это возможно ?

3 Solutions collect form web for “Можно ли перезаписать строковую форму namedtuple?”

Да, это непросто сделать, и есть пример для него в документах namedtuple .

Этот метод заключается в создании подкласса, который добавляет собственный метод 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' 

Вы можете определить для него функцию:

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

и назначьте его __str__ :

 Spoken.__str__ = print_loudness 

вы можете использовать такой код:

 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.

  • Как наиболее эффективно обнаруживать изменения файла для добавления / удаления / переименования каталога в Python?
  • python распаковать маленький endian
  • Python - зацикливание файлов - закажите
  • Python AttributeError: объект не имеет атрибута
  • Конструкторы Python и __init__
  • Преобразовать двоичную строку базы-2 в int
  • Как ввести список в функцию? в python
  • Facebook Python «ValueError: слишком много значений для распаковки»
  • Python - лучший язык программирования в мире.