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

Python排序Item对象列表报错:AttributeError: type object 'Item' has no attribute 'price'

嘿,这个AttributeError的问题我太熟了!大概率是你在排序的时候搞错了「Item类」和「Item实例」的区别,或者列表里根本没装对东西。我给你拆解几个最可能的原因和解决办法:

可能的问题&解决办法

1. 你的列表里装的不是Item对象,而是Item类本身!

这是最常见的坑。比如在read_file方法里,你可能不小心写了:

items.append(Item)  # 错!加的是类,不是实例

而不是:

items.append(Item(price=提取到的价格))  # 对!要创建实例再添加

验证方法:遍历列表打印元素类型,看看是不是<class '__main__.Item'>:

for item in your_item_list:
    print(type(item))

如果输出是<class 'type'>,那就是加了类而非实例,修改append的代码即可。

2. 排序代码写错了,把Item类当成了排序对象

比如你可能写了:

sorted(Item, key=lambda x: x.price)  # 错!排序的是类,不是列表

或者:

your_item_list.sort(key=Item.price)  # 错!Item是类,没有实例的price属性

正确的排序应该针对你的Item对象列表,用lambda表达式取每个实例的price:

# 原地排序
your_item_list.sort(key=lambda item: item.price)
# 生成新的排序列表
sorted_items = sorted(your_item_list, key=lambda item: item.price)

3. Item类的price属性定义有问题

检查你的Item类是不是在__init__里正确定义了实例属性:

class Item:
    def __init__(self, price):
        self.price = price  # 这是每个实例独有的属性,正确!

如果你的price是定义成类属性(比如price = 0写在__init__外面),虽然理论上能访问,但如果实例化时没正确赋值,也可能出问题,但结合你的报错,前两个原因概率更高。

4. 读取文件时没正确提取price值

比如read_file里分割行内容后,可能没正确拿到price的数值,导致创建Item实例时传参错误,不过这种情况一般会报别的错,但也可以检查一下:

# 比如分割后打印看看内容
parts = line.strip().split()  # 或者按你的分隔符分割
print(parts)  # 确认有没有price对应的字段

先从第一点开始排查,基本上就能解决这个问题啦!

内容的提问来源于stack exchange,提问作者Camilo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:58:15