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

如何显示随机生成列表中自定义类对象的具体数据?

解决Python自定义类列表打印仅显示对象ID的问题

问题核心

打印包含自定义类对象的列表时,Python默认会调用每个对象的__repr__方法,若未正确实现该方法,就会显示默认的对象内存地址。你提到单独调用display()正常但列表打印不行,大概率是__str__或__repr__的实现存在问题,比如缩进错误、未返回字符串,或者方法名拼写错误。

正确解决方法

1. 正确实现__str__和__repr__方法

这两个方法必须返回字符串类型,且要作为类的方法正确缩进。以Square类为例:

import random

class Square:
    def __init__(self, side_length):
        self.side = side_length

    def display(self):
        print(f"正方形边长:{self.side}")

    # 用于直接print(对象)时的输出
    def __str__(self):
        return f"Square(边长={self.side})"

    # 用于打印列表、交互式命令行显示对象时的输出
    def __repr__(self):
        return self.__str__()  # 复用__str__的内容,也可自定义

# 生成随机对象列表
square_list = [Square(random.randint(1, 10)) for _ in range(3)]

# 现在打印列表可看到具体内容
print(square_list)
# 输出示例: [Square(边长=7), Square(边长=2), Square(边长=9)]

# 单独打印对象也正常
print(square_list[0])
# 输出示例: Square(边长=7)

2. 不修改类的前提下,遍历列表逐个处理

如果暂时不想改动类的代码,可以遍历列表,对每个对象调用display()或转换为字符串:

# 方式1:调用display()方法
for sq in square_list:
    sq.display()

# 方式2:转换为字符串后打印列表
print([str(sq) for sq in square_list])

常见错误排查

  • 检查方法名:__str__和__repr__前后各有两个下划线,别写错数量。
  • 确保返回字符串:方法内要写return f"...",而非直接print(f"..."),因为这两个方法需要返回值供外部调用。
  • 缩进正确:方法必须缩进在类的内部,否则不属于类的成员方法,Python无法识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:50:24