我有一个AI例程,它将各种数据存储为Memory
个对象。 Memory
个对象根据它们传递给构造函数的“内存类型”有不同的参数(回想起来,每种类型的内存确实应该是Memory
的子类,但这一点并不重要)。
我需要为__str__()
- s设置Memory
方法。在另一种语言中,我可能会这样做:
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
...
但Pythonic(和快速)做这种事情的方法是使用dicts。但问题是,这些字符串需要在返回之前插入值。我想这可以用lambdas来完成,但这让我觉得有点不雅和过于复杂。有没有更好的方法(str.format()突然想到......)?
答案 0 :(得分: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'