咱们在设计一个类时,若是只实现__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