str
我们先定义一个 Student 类,打印一个实例:
>>> class Student(object):
… def init(self, name):
… self.name = name
…
>>> print(Student('Michael'))
<main.Student object at 0x109afb190>
打印出一堆 <main.Student object at 0x109afb190> ,不好看。
怎么才能打印得好看呢?只需要定义好 str() 方法,返回一个好看的字符串就可以了:
>>> class Student(object):
… def init(self, name):
… self.name = name
… def str(self):
… return 'Student object (name: %s)' % self.name
…
>>> print(Student('Michael'))
Student object (name: Michael)
这样打印出来的实例,不但好看,而且容易看出实例内部重要的数据。
但是细心的朋友会发现直接敲变量不用 print ,打印出来的实例还是不好看:
>>> s = Student('Michael')
>>> s
<main.Student object at 0x109afb310>
这是因为直接显示变量调用的不是 str() ,而是 repr() ,两者的区别是 str() 返回用户看到的字符串,而 repr() 返回程序开发者看到的字符串,也就是说, repr() 是为调试服务的。
解决办法是再定义一个 repr() 。但是通常 str() 和 repr() 代码都是一样的,所以,有个偷懒的写法:
class Student(object):
def init(self, name):
self.name = name
def str(self):
return 'Student object (name=%s)' % self.name
repr = str