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

如何正确修改Python的__repr__方法以实现对象的正确表示?

问题解决:迭代器对象的__repr__显示内存地址

问题原因

你遇到的情况是因为itertools.combinations()返回的是迭代器对象,这类对象的默认__repr__实现只会输出内存地址,不会展开显示内部元素——这是迭代器的惰性特性导致的,它不会提前生成所有组合,只有在迭代时才会逐个生成。而你类内部创建的列表等序列对象,它们的__repr__会自动展开显示内容,所以看起来“正常”。

解决方案

要让__repr__显示组合的具体内容,只需要把迭代器转换成列表(或者其他可显示内容的序列类型)即可,有两种常见方式:

方式1:修改__repr__方法,在格式化时转换为列表

直接在返回字符串前,把get_combinations的结果转成列表:

def __repr__(self):
    return f'{list(self.get_combinations(2))}'

方式2:修改get_combinations方法,返回列表而非迭代器

如果你的场景中不需要迭代器的惰性特性,可以直接在方法内部转换:

def get_combinations(self, r):
    return list(it.combinations(self.sorted_names, r))

验证效果

修改后运行代码,print(repr(a))就会输出类似[('Alice', 'Bob'), ('Alice', 'Charlie'), ...]的具体组合内容,而不是内存地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:25:33