Python中__repr__和__str__区别详解

  

看下面的例子就明白了

        类测试(对象):   def __init__(自我价值=' https://www.yisu.com/zixun/hello,世界! '):   自我。data=https://www.yisu.com/zixun/value>> t=测试()>> t   <__main__。测试在0 x7fa91c307190>>打印t   <__main__。测试对象在0 x7fa91c307190>      之前      

看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
  

  

下面我们重构下该类的__ repr__以及str,看看它们俩有啥区别

        #重构__repr__   类TestRepr(测试):   def __repr__(自我):   返回“TestRepr (% s)的% self.data      在在在tr=TestRepr ()   在在在tr直接终端显示,不打印就是面向程序员   TestRepr (hello, world !)   在在在打印tr打印是面向程序员   TestRepr (hello, world !)      之前      

重构__ repr__方法后,不管直接输出对象还是通过打印打印的信息都按我们repr方法中定义的格式进行显示了

        #重构__str__   属性TestStr(测试):   def __str__(自我):   返回(价值:% s)的% self.data      在在在ts=TestStr ()   在在在ts   & lt; __main__。在0 x7fa91c314e50> TestStr;   在在在打印ts   (价值:你好,世界!)      之前      

你会发现,直接输出对象ts时并没有按我们str方法中定义的格式进行输出,而用打印输出的信息却改变了

  

repr和str这两个方法都是用于显示的,str是面向用户的,repr面而向程序员。

  

打印操作会首先尝试str和str内置函数(印刷运行的内部等价形式),它通常应该返回一个友好的显示。

  

__ repr__用于所有其他的环境中:用于交互模式下提示回应以repr函及数,如果没有使用str,会使用打印和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。

  

当我们想所有环境下都统一显示的话,可以重构repr方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用str,而程序员在开发期间则使用底层的repr来显示,实际上str只是覆盖了repr以得到更友好的用户显示。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Python中__repr__和__str__区别详解