考虑一个对象列表和一个作用于一个对象的方法:
beers = []
beers.append(Beer('Carlsberg', 'tasty'))
beers.append(Beer('Guinness', 'bitter'))
beers.append(Beer('Leffe', 'perfect'))
def howIsBeer (name):
taste = ???
print taste
Class Beer:
def __init__ (self, name, taste):
self.name = name
self.taste = taste
如果仅提供啤酒名称,howIsBeer() 方法将如何获得啤酒的味道? 我的第一个倾向是迭代 beers 列表,但作为 Python,我怀疑有更直接的方法。有吗?
请您参考如下方法:
真的想不出更好的方法,只需使用 for 循环即可。
def howIsBeer(name):
for beer in beers:
if beer.name == name:
return beer.taste
In [1]: howIsBeer("Carlsburg")
Out[1]: tasty
另请注意,关键字class 是用小写的c 编写的。您还必须在使用它创建实例之前定义您的类。
编辑: 正如评论中所建议的,一种方法是定义字典。如果你觉得它有用,你可以使用下面的代码。但是请注意,仅当您有 HUGE 数量的 Beer 对象并且性能速度对您来说非常重要时才推荐这样做。否则使用提供的第一个代码
class Beer:
names = {}
def __init__(self, name, taste):
Beer.names[name] = self
self.name = name
self.taste = taste
In [3]: Beer.names["Carlsburg"].taste
Out[3]: tasty
