>>> Spoken = namedtuple("Spoken", ["loudness", "pitch"])
>>> s = Spoken(loudness=90, pitch='high')
>>> str(s)
"Spoken(loudness=90, pitch='high')"
我要的是:
>>> str(s)
90
這是我想要的字符串表示,以顯示音量屬性。 這可能嗎?
>>> Spoken = namedtuple("Spoken", ["loudness", "pitch"])
>>> s = Spoken(loudness=90, pitch='high')
>>> str(s)
"Spoken(loudness=90, pitch='high')"
我要的是:
>>> str(s)
90
這是我想要的字符串表示,以顯示音量屬性。 這可能嗎?
是的,這是不是很難做,有它在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'
這是什麼'__slots__'用法?它是必需的還是可選的? – clwen
將'__slots__''設置爲空元組是一種節省內存的技巧。它確保''Spoken''實例與普通元組相同的內存量。沒有插槽條目,每個實例都需要自己的字典(比元組大得多)。 –
您可以定義一個函數爲它:
def print_loudness(self):
return str(self.loudness)
並指定爲__str__
:
Spoken.__str__ = print_loudness
出於好奇,這是否會返回一個'integer'或'string',因爲你的重載'str'返回一個'int'? – Serdalis
@Serdalis:好的,這會錯誤地返回一個'integer'。現在修復它。 –
我喜歡這種方式,因爲它使用''namedtuple''的默認方式增加了很少的文本。你甚至可以使用lambda表達式來縮短它,而不會失去很多可讀性(恕我直言):''口語.__ str__ = lambda x:str(x.loudness)''。 (當然你可以在lambda表達式中使用['''''''''str.format(...)''](http://stackoverflow.com/q/5082452)。 – djlauk
你可以使用這樣的代碼:
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函數。
也許你應該創建一個合適的可重用類。 – Oliver