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

背景

由于自定义对象如果没有指定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__方法
posted @ 2023-09-07 11:16  CryDongle  阅读(8)  评论(0编辑  收藏  举报  来源