__str__和 __repr__函数对比分析

 __str__和 __repr__函数对比分析

  1. 二者的目的不同,__str__是为了给最终用户提供实例对象的信息,__repr__是给开发人员提供对象的信息;
  2. 由于目的不同,二者展示的信息应该不同,__str__应该提供用户容易理解的信息,将属性代码翻译成客户理解的文字说明,__repr__应该提供开发者容易使用的信息,最好是能够直接使用输出的信息直接拷贝部分或全部就能重定义一个对象,这些信息类似于集成环境下debug看内存数据对象的格式差不多;
  3. 二者触发调用的方式不同,__str__是在print(对象)等情况下调用,__repr__是在查看对象,repr(对象)等情况下调用;
  4. 当没有重写__str__方法但重写了__repr__方法时,触发调用__str__方法实际上就是调用__repr__方法
    1)、个人认为,这是由于没有重写__str__方法时,__str__方法就是从父类继承的,而所有类的父类object应该是在__str__方法中直接调用了__repr__方法,导致自定义类继承的__str__方法中也是调用__repr__方法,而__repr__方法重写了,所以才是这样的结果。但以上结果个人没有去核实源码,仅是自己分析,暂时无法证明;
    2)、个人建议开发者在实现自己的自定义类时,至少重写repr方法,这能保证类到字符串始终有一个有效的自定义转换方式,并在与客户交互的类中,提供重写的__str__方法。
  5. 部分内置类如容器(指有元素的对象)使用str(对象)返回的也是__repr__对应的字符串内容,这也是为什么在交互模式下我们输入相关变量能直接看到变量的数据;
  6. 二者都是一种比较符合Python风格的内置方法,无需显示调用方法就可以触发
posted @ 2019-08-16 14:17  -Rye-  阅读(83)  评论(0)    收藏  举报