当我尝试使用 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__
进行打印。