如何使用 print() 打印类实例?

发布时间 2023-11-03 18:38:18作者: 小满独家

内容来自 DOC https://q.houxu6.top/?s=如何使用 print() 打印类实例?

当我尝试使用 print() 打印一个类的实例时,我得到的输出是这样的:

>>> class Test():
...     def __init__(self):
...         self.a = 'foo'
...
>>> print(Test())
<__main__.Test object at 0x7fc9a9e36d60>

如何让 print 显示一些自定义的内容(例如包含 a 属性值的内容)?也就是说,如何定义当类被打印时(它们的 字符串表示)会出现什么?


如果你想要为类本身定义行为(在这种情况下,即让 print(Test) 显示一些自定义的内容,而不是 <class __main__.Test> 或类似的内容),可以参考这个链接。实际上,技巧是基本相同的,但应用起来更棘手。


>>> class Test:
...     def __repr__(self):
...         return "Test()"
...     def __str__(self):
...         return "member of Test"
... 
>>> t = Test()
>>> t
Test()
>>> print(t)
member of Test

当使用 print 函数打印对象时,会调用 __str__ 方法,而当使用 repr() 函数或交互式提示符查看对象时,会调用 __repr__ 方法。

如果没有定义 __str__ 方法,Python 将使用 __repr__ 的结果进行打印。如果定义了 __str__ 但没有定义 __repr__,Python 将使用上面的例子作为 __repr__,但仍然使用 __str__ 进行打印。