Python中__repr__和__str__区别详解
看下面的例子就明白了
classTest(object): def__init__(self,value='hello,world!'): self.data=value >>>t=Test() >>>t <__main__.Testat0x7fa91c307190> >>>printt <__main__.Testobjectat0x7fa91c307190>
看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
下面我们重构下该类的__repr__以及str,看看它们俩有啥区别
#重构__repr__ classTestRepr(Test): def__repr__(self): return'TestRepr(%s)'%self.data >>>tr=TestRepr() >>>tr直接终端显示,不print就是面向程序员 TestRepr(hello,world!) >>>printtrprint是面向程序员 TestRepr(hello,world!)
重构__repr__方法后,不管直接输出对象还是通过print打印的信息都按我们repr方法中定义的格式进行显示了
#重构__str__ calssTestStr(Test): def__str__(self): return'[Value:%s]'%self.data >>>ts=TestStr() >>>ts <__main__.TestStrat0x7fa91c314e50> >>>printts [Value:hello,world!]
你会发现,直接输出对象ts时并没有按我们str方法中定义的格式进行输出,而用print输出的信息却改变了
repr和str这两个方法都是用于显示的,str是面向用户的,而repr面向程序员。
打印操作会首先尝试str和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。
__repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用str,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
当我们想所有环境下都统一显示的话,可以重构repr方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用str,而程序员在开发期间则使用底层的repr来显示,实际上str只是覆盖了repr以得到更友好的用户显示。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。