2014-01-12 27 views
1

當我有存儲各種數據Memory對象的AI程序。 Memory對象有基於被傳遞給構造自己的「記憶型」不同的參數(現在回想起來,每種類型的內存真的應該一直是Memory一個子類,但這不是重要的時刻)。評估串生產陳述「後」存儲在一個字典

我需要建立一個__str__()方法Memory -s。在另一種語言,我可能會做這樣的事情:

if self.memtype == "Price": 
    return self.good+" is worth "+self.price+" at "+self.location 
elif self.memtype == "Wormhole": 
    return self.fromsys+" has a wormhole to "+self.tosys 
... 

但是Python的(和快速)的方式做這樣的事情是使用類型的字典。問題是,這些字符串在返回之前需要插入值。我想這可以用lambda來完成,但是這讓我覺得有點不雅和過於複雜。有沒有更好的方法(str.format()突然想起來......)?

回答

5

是,用str.format()

formats = { 
    'Price': '{0.good} is worth {0.price} at {0.location}', 
    'Wormhole': '{0.fromsys} has a wormhole to {0.tosys}', 
} 

return formats[self.memtype].format(self) 

通過self傳遞作爲第一個位置參數,可以在{...}格式化佔位符上self解決任何屬性。

可以應用更詳細的格式的值(如浮點精度,填充,對準等)也一樣,看到formatting syntax

演示:

>>> class Demo(): 
...  good = 'Spice' 
...  price = 10 
...  location = 'Betazed' 
...  fromsys = 'Arrakis' 
...  tosys = 'Endor' 
... 
>>> formats = { 
...  'Price': '{0.good} is worth {0.price} at {0.location}', 
...  'Wormhole': '{0.fromsys} has a wormhole to {0.tosys}', 
... } 
>>> formats['Price'].format(Demo()) 
'Spice is worth 10 at Betazed' 
>>> formats['Wormhole'].format(Demo()) 
'Arrakis has a wormhole to Endor'