通常在打印对象的时候,打印的总是对象的地址,为了在打印的时候打印出具体的信息,我们会采用在类中重写str或repr方法。下面我们来看看两者的用途和却别。
首先我们来看看不重写这两个方法结果怎样:
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
person = Person("张三",19)
print(person)
p1 = Person("李四",10)
p2 = Person("王五",20)
p3 = Person("赵六",30)
lst = [p1,p2,p3]
print(lst)
输出结果:
<__main__.Person object at 0x0000000001E8D860>
[<__main__.Person object at 0x0000000001E8D908>, <__main__.Person object at 0x0000000001E8D8D0>, <__main__.Person object at 0x0000000001E8D940>]
我们可以看到输出的结果只能看到对象的地址,不能清楚的知道对象的具体信息,那么我们用下面这个例子来演示重写之后的效果。
class Person:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return f"姓名:{self.name},年龄:{self.age}岁."
def __repr__(self):
return f"这位同学叫:{self.name},今年:{self.age}岁."
person = Person("张三",19)
print(person)
p1 = Person("李四",10)
p2 = Person("王五",20)
p3 = Person("赵六",30)
lst = [p1,p2,p3]
print(lst)
输出结果:
姓名:张三,年龄:19岁.
[这位同学叫:李四,今年:10岁., 这位同学叫:王五,今年:20岁., 这位同学叫:赵六,今年:30岁.]
总结:
__str__
(),用于直接打印对象本身。
__repr__
(),用于打印列表里面包含对象。