一个例子搞懂Python中__str__与__repr__的区别

通常在打印对象的时候,打印的总是对象的地址,为了在打印的时候打印出具体的信息,我们会采用在类中重写strrepr方法。下面我们来看看两者的用途和却别。

首先我们来看看不重写这两个方法结果怎样:

class Person:
   def __init__(self,name,age):
       self.name = name
       self.age = age
person = Person("张三",19)
print(person)

p1 = Person("李四",10)
p2 = Person("王五",20)
p3 = Person("赵六",30)
lst = [p1,p2,p3]
print(lst)

输出结果:

<__main__.Person object at 0x0000000001E8D860>
[<__main__.Person object at 0x0000000001E8D908>, <__main__.Person object at 0x0000000001E8D8D0>, <__main__.Person object at 0x0000000001E8D940>]

我们可以看到输出的结果只能看到对象的地址,不能清楚的知道对象的具体信息,那么我们用下面这个例子来演示重写之后的效果。

class Person:
   def __init__(self,name,age):
       self.name = name
       self.age = age
   def __str__(self):
       return f"姓名:{self.name},年龄:{self.age}岁."
   def __repr__(self):
       return f"这位同学叫:{self.name},今年:{self.age}岁."
person = Person("张三",19)
print(person)

p1 = Person("李四",10)
p2 = Person("王五",20)
p3 = Person("赵六",30)
lst = [p1,p2,p3]
print(lst)

输出结果:

姓名:张三,年龄:19岁.
[这位同学叫:李四,今年:10岁., 这位同学叫:王五,今年:20岁., 这位同学叫:赵六,今年:30岁.]

总结:
__str__(),用于直接打印对象本身。
__repr__(),用于打印列表里面包含对象。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容