背景
由于自定义对象如果没有指定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,...]
总结
- 对象字符串输出需要实现
__str__
或__repr__
方法 - 对象字符串输出优先级:
__str__
>__repr__
- 对象列表字符串输出必需实现
__repr__
方法