咱們在設計一個類時,若是隻實現__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