You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:45:03