看下面的例子就明白了
类测试(对象): 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__区别详解