通常在打印對象的時(shí)候,打印的總是對象的地址,為了在打印的時(shí)候打印出具體的信息,我們會采用在類中重寫str或repr方法。下面我們來看看兩者的用途和卻別。
首先我們來看看不重寫這兩個(gè)方法結(jié)果怎樣:
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)
輸出結(jié)果:
<__main__.Person object at 0x0000000001E8D860>
[<__main__.Person object at 0x0000000001E8D908>, <__main__.Person object at 0x0000000001E8D8D0>, <__main__.Person object at 0x0000000001E8D940>]
我們可以看到輸出的結(jié)果只能看到對象的地址,不能清楚的知道對象的具體信息,那么我們用下面這個(gè)例子來演示重寫之后的效果。
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"這位同學(xué)叫:{self.name},今年:{self.age}歲."
person = Person("張三",19)
print(person)
p1 = Person("李四",10)
p2 = Person("王五",20)
p3 = Person("趙六",30)
lst = [p1,p2,p3]
print(lst)
輸出結(jié)果:
姓名:張三,年齡:19歲.
[這位同學(xué)叫:李四,今年:10歲., 這位同學(xué)叫:王五,今年:20歲., 這位同學(xué)叫:趙六,今年:30歲.]
總結(jié):
__str__(),用于直接打印對象本身。
__repr__(),用于打印列表里面包含對象。