【Python】关于自定义对象的字符串输出问题

文章讲述了Python中,如果没有为自定义对象实现`__str__`和`__repr__`方法,控制台打印将显示内存地址。`__str__`优先于`__repr__`决定对象的字符串表示。列表输出时,`__repr__`是必须的。
摘要由CSDN通过智能技术生成

背景

由于自定义对象如果没有指定toString方式,则控制台print打印是就是内存地址型式,如:<__main__.Main object at 0x0000023507367A30>

demo

class Main:
    def __init__(self):
        self.name = "main"

    def __str__(self):
        return "Main Str"
    
    def __repr__(self):
        return "Main Repr"


if __name__ == '__main__':
    main = Main()
    print(main)  
    # 没有实现__str__和__repr__方法会输出内存地址: <__main__.Main object at 0x0000023507367A30>
    # 实现了__str__会输出字符串内容: Main Str
    # 没有实现__str__但实现了__repr__会输出字符串内容: Main Repr

    mains = [Main() for i in range(10)]
    print(mains) 
    # 没有实现__repr__方法会输出内存地址: [ <__main__.Main object at 0x000001827D543DF0>,...]
    # 实现__repr__就会输出字符串内容: [Main Repr,...]

总结

  1. 对象字符串输出需要实现__str____repr__方法
  2. 对象字符串输出优先级:__str__ > __repr__
  3. 对象列表字符串输出必需实现__repr__方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值