Skip to main content
 首页 » 编程设计

python之如何按属性访问列表中的对象

2025年05月04日15unruledboy

考虑一个对象列表和一个作用于一个对象的方法:

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