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

相關文章
相關標籤/搜索