Python之__str__与__repr__

咱们在设计一个类时,若是只实现__str__会如何?python

>>> 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__会如何?code

>>> 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__又会如何 ?it

>>> 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__class

相关文章
相关标签/搜索