字符串表示
__str__
如果要把一个类的实例变成 str,就需要实现特殊方法__str__():
不使用__str__()方法
class Student(object):
def __init__(self,id,name,age):
self.id=id
self.name=name
self.age=age
s=Student(111,"Bob",18)
print(s)
输出结果:<main.Student object at 0x0362EBF0>
使用__str__()方法
class Student(object):
def __init__(self,id,name,age):
self.id=id
self.name=name
self.age=age
def __str__(self):
return "学号:{}--姓名:{}--年龄{}".format(self.id,self.name,self.age)
s=Student(111,"Bob",18)
print(s)
输出结果:学号:111–姓名:Bob–年龄18
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
# self 代表该方法的调用者,即谁调用该方法
# def __str__(self):
# return ",".join(self.employee)
company = Company(["tom","bob","jane"])
print(company) //打印当前函数调用的地址
# <__main__.Company object at 0x00000278AF6649D0>
__repr__
通常情况下,直接输出某个实例化对象,本意往往是想了解该对象的基本信息,例如该对象有哪些属性,它们的值各是多少等等。但默认情况下,我们得到的信息只会是“类名+object at+内存地址”,对我们了解该实例化对象帮助不大。
那么,有没有可能自定义输出实例化对象时的信息呢?答案是肯定,通过重写类的 repr() 方法即可。事实上,当我们输出某个实例化对象时,其调用的就是该对象的 repr() 方法,输出的是该方法的返回值。
以本节开头的程序为例,执行 print(clangs) 等同于执行 print(clangs.repr()),程序的输出结果是一样的(输出的内存地址可能不同)。
和 init(self) 的性质一样,Python 中的每个类都包含 repr() 方法,因为 object 类包含 reper() 方法,而 Python 中所有的类都直接或间接继承自 object 类。
默认情况下,repr() 会返回和调用者有关的 “类名+object at+内存地址”信息。当然,我们还可以通过在类中重写这个方法,从而实现当输出实例化对象时,输出我们想要的信息。
class CLanguage:
def __init__(self):
self.name = "C语言中文网"
self.add = "http://c.biancheng.net"
def __repr__(self):
return "CLanguage[name="+ self.name +",add=" + self.add +"]"
clangs = CLanguage()
print(clangs)
程序运行结果为:
CLanguage[name=C语言中文网,add=http://c.biancheng.net]
由此可见,repr() 方法是类的实例化对象用来做“自我介绍”的方法,默认情况下,它会返回当前对象的“类名+object at+内存地址”,而如果对该方法进行重写,可以为其制作自定义的自我描述信息。