Python打印类所有实例仅输出对象地址,如何获取实例实际信息
类实例自定义打印方案
你当前看到的内存地址格式输出是Python类实例的默认表示逻辑,只要给类添加自定义的字符串表示魔法方法即可实现可读输出,无需引入任何第三方模块。
核心修改点
Python打印列表内的实例时会调用实例的__repr__方法,单独打印单个实例时会调用__str__方法,你可以按需定义这两个方法:
class Planets: instances = [] def __init__(self, name, days, p_type, distance_from_sun): # 新增name属性存储星球标识,你也可以根据自己的需求保留/调整属性 self.name = name self.lengthOfDay = days self.planetType = p_type self.distanceFromSun = distance_from_sun self.__class__.instances.append(self) # 定义列表打印时的输出格式 def __repr__(self): return f"<Planet:{self.name} 公转周期{self.lengthOfDay}天>" # 定义单个实例打印时的输出格式,可和__repr__内容一致 def __str__(self): return f"星球:{self.name},类型:{self.planetType},距太阳距离:{self.distanceFromSun}天文单位,公转周期:{self.lengthOfDay}天"
实例初始化调整
创建实例时补充name参数即可:
T = 'Terrestrial' G = 'Gas Giant' I = 'Ice Giant' mercury = Planets("水星", 88, T, 0.4) venus = Planets("金星", 225, T, 0.7) earth = Planets("地球", 365, T, 1) mars = Planets("火星", 687, T, 1.5) jupiter = Planets("木星", 4333, G, 5.2) saturn = Planets("土星", 10759, G, 9.5) uranus = Planets("天王星", 30687, I, 19.8) neptune = Planets("海王星", 60190, I, 30)
效果验证
- 打印所有实例列表:
print(Planets.instances)会输出你定义的__repr__格式内容,不再显示内存地址 - 打印单个实例:
print(earth)会输出__str__定义的可读内容 - 你之前尝试的
print('\n'.join(A.instances))报错的原因是join方法仅支持拼接字符串,修改为print('\n'.join(str(inst) for inst in Planets.instances))即可实现逐行打印所有实例信息。
内容的提问来源于stack exchange,提问作者SkyWalker
相关产品推荐
相关产品推荐

