您的位置:首页 > 编程语言 > Python开发

Python之__str__与__repr__

2017-05-03 00:00 281 查看
我们在设计一个类时,如果只实现__str__会如何?

>>> class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return '姓名:%s  年龄:%d' %(self.name,self.age)

>>> people=[Person('范冰冰',37),Person('柳岩',36),Person('王菲',47)]
>>> people
[<__main__.Person object at 0x0000021BB6451B38>, <__main__.Person object at 0x0000021BB6451B00>, <__main__.Person object at 0x0000021BB63AAC18>]

这显然不是我们需要的

>>> [print(p) for p in people]
姓名:范冰冰  年龄:37
姓名:柳岩  年龄:36
姓名:王菲  年龄:47
[None, None, None]
>>> for p in people:
print(p)

姓名:范冰冰  年龄:37
姓名:柳岩  年龄:36
姓名:王菲  年龄:47

只能这样用,如果增加实现__repr__会如何?

>>> class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def __str__(self):
return '姓名:%s  年龄:%d' %(self.name,self.age)
def __repr__(self):
return self.__str__()
>>> people=[Person('范冰冰',37),Person('柳岩',36),Person('王菲',47)]
>>> people
[姓名:范冰冰  年龄:37, 姓名:柳岩  年龄:36, 姓名:王菲  年龄:47]
>>> [p for p in people]
[姓名:范冰冰  年龄:37, 姓名:柳岩  年龄:36, 姓名:王菲  年龄:47]

达到我们的预期,那如果只实现__repr__,不实现__str__又会如何 ?

>>> class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def __repr__(self):
return '姓名:%s  年龄:%d' %(self.name,self.age)

>>> p1=Person('范冰冰',37)
>>> p1
姓名:范冰冰  年龄:37
>>> people=[Person('范冰冰',37),Person('柳岩',36),Person('王菲',47)]
>>> people
[姓名:范冰冰  年龄:37, 姓名:柳岩  年龄:36, 姓名:王菲  年龄:47]
>>> for p in people:
print(p)

姓名:范冰冰  年龄:37
姓名:柳岩  年龄:36
姓名:王菲  年龄:47

如此看来,在类中一般情况下,只实现__repr__
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: