Python根据对象属性查找数组中对应元素的实现问题求助
问题排查与修复
原代码存在的4个核心错误
- 初始化方法参数赋值错误:
__init__方法接收的参数是number,但赋值时写的是self.num = num,右侧的num属于未定义变量,运行会直接抛出NameError。 - 属性名不统一:即便修复了上述变量未定义问题,实例属性存储用的是
num,但howmany方法中尝试访问who.number,属性名不匹配会触发AttributeError。 - 类属性访问逻辑错误:
Test.name == 'dog'是无效表达式,Test是类而非实例,无法直接通过类访问实例的name属性,运行会抛出属性不存在的错误。 list.index()方法使用错误:index()需要传入待查找的实例对象本身,不支持直接传入条件匹配数组中的自定义对象,需要先遍历完成筛选。
修复后的可运行代码
sett = [] class Test: def __init__(self, name, number): self.name = name # 统一属性名,和后续访问的number保持一致 self.number = number @staticmethod def howmany(who): print(who.number) sett.append(Test('dog', 2)) sett.append(Test('cat', 5)) sett.append(Test('fish', 7)) # 遍历筛选出name为dog的实例 target_instance = next(item for item in sett if item.name == 'dog') Test.howmany(target_instance)
运行上述代码会输出2,和预期结果一致。
如果你需要通过索引定位对应实例,也可以采用以下写法:
# 先提取所有实例的name属性,再查对应的索引 target_index = [item.name for item in sett].index('dog') Test.howmany(sett[target_index])
内容的提问来源于stack exchange,提问作者Nels Hedegaard
相关产品推荐
相关产品推荐

