先来看一段代码
class Foo():
"""docstring for Foo"""
def __init__(self, name):
self.name = name
f = Foo("xiaohong")
print(f)
l = list("hello")
print(l)
执行结果为:
<__main__.Foo object at 0x0000023F0A05B400>
['h', 'e', 'l', 'l', 'o']
python中一切皆对象,f是Foo类的实例,l是List类的实例,但是print出来的东西却完全不一样,原因就是print函数触发的是产生实例的类的str方法,若该类没有str方法就找repr方法,若repr方法也没有就会返回像第一行这样的东西,我们都知道str调用的是类的__str__()方法,repr调用的是类的__repr__()方法,所以我们知道应该怎么修改Foo类了,那就加一个__str__()吧,
class Foo():
"""docstring for Foo"""
def __init__(self, name):
self.name = name
def __str__(self):
return self.name
f = Foo("xiaohong")
print(f)
执行结果为:
xiaohong
总结一下,想要print你的类,就添加__str__()方法或者__repr__()方法,需要注意的是不管是__str__()还是__repr__(),它们的返回值必须是字符串类型,不然会报如下的错误:
TypeError: __str__ returned non-string (type int)