Python之__str__与__repr__

原创
2017/05/03 17:28
阅读数 19

我们在设计一个类时,如果只实现__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__

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
在线直播报名
返回顶部
顶部