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

如何在Python中打印列表内对象的指定属性?

在Python中打印列表内对象的指定属性

先明确问题核心:你说的objects.name报错,是因为列表本身没有name属性——列表里装的是一个个类实例,得逐个访问每个实例的属性才行。下面给几种实用的实现方法,先从基础场景的代码开始:

先搭好基础代码

假设你的类结构是这样的:

class PlayObject:
    def __init__(self, name):
        self.name = name

class Car(PlayObject):
    def __init__(self, name, speed):
        super().__init__(name)
        self.speed = speed

class Cat(PlayObject):
    def __init__(self, name, color):
        super().__init__(name)
        self.color = color

# 实例化并加入列表
obj_list = [Car("特斯拉", 200), Cat("橘猫", "橙色")]

直接打印obj_list会输出类似<__main__.Car object at 0x...>的内存地址,这是因为Python默认用对象的内存地址来生成字符串表示。


方法1:重写类的__str__或__repr__方法

如果希望直接打印对象(或包含对象的列表)时,自动显示指定属性,就在基类里重写这两个方法:

  • __str__:面向用户的友好输出,用print()调用单个对象时触发
  • __repr__:面向开发者的精确输出,打印列表或直接显示对象时触发

修改PlayObject类:

class PlayObject:
    def __init__(self, name):
        self.name = name

    # 重写__str__,print单个对象时用
    def __str__(self):
        return f"PlayObject(name={self.name})"

    # 重写__repr__,打印列表或直接显示对象时用
    def __repr__(self):
        return self.__str__()

现在再打印obj_list,就会输出:

[PlayObject(name=特斯拉), PlayObject(name=橘猫)]

如果想让子类显示更具体的信息,也可以在子类里单独重写这两个方法,比如给Car加:

def __str__(self):
    return f"Car(name={self.name}, speed={self.speed})"

方法2:遍历列表,手动提取属性

如果不想修改类的定义,直接遍历列表里的每个对象,提取指定属性打印:

# 逐个打印每个对象的name属性
for obj in obj_list:
    print(obj.name)

# 或者生成属性列表后统一打印
name_list = [obj.name for obj in obj_list]
print(name_list)  # 输出:['特斯拉', '橘猫']

这种方法灵活,想提取哪个属性就改哪个,比如要打印Car的speed和Cat的color,可以加判断:

for obj in obj_list:
    if isinstance(obj, Car):
        print(f"{obj.name} 的速度是 {obj.speed}")
    elif isinstance(obj, Cat):
        print(f"{obj.name} 的颜色是 {obj.color}")

方法3:用operator.attrgetter批量获取属性

如果要批量提取属性,operator.attrgetter是更简洁的写法,适合处理大量对象:

from operator import attrgetter

get_name = attrgetter('name')
name_list = list(map(get_name, obj_list))
print(name_list)  # 输出:['特斯拉', '橘猫']

它和列表推导式效果类似,但在需要提取多个属性时更方便,比如同时取name和其他共性属性:

# 示例:提取所有对象的name属性
get_name = attrgetter('name')
result = [get_name(obj) for obj in obj_list]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:30:36