时间:2021-05-22
看下面的例子就明白了
class Test(object): def __init__(self, value='hello, world!'): self.data = value>>> t = Test()>>> t<__main__.Test at 0x7fa91c307190>>>> print t<__main__.Test object at 0x7fa91c307190>看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
下面我们重构下该类的__ repr__以及str,看看它们俩有啥区别
# 重构__repr__class TestRepr(Test): def __repr__(self): return 'TestRepr(%s)' % self.data>>> tr = TestRepr()>>> tr 直接终端显示,不print就是面向程序员TestRepr(hello, world!)>>> print tr print是面向程序员TestRepr(hello, world!)重构__ repr__方法后,不管直接输出对象还是通过print打印的信息都按我们repr方法中定义的格式进行显示了
# 重构__str__calss TestStr(Test): def __str__(self): return '[Value: %s]' % self.data>>> ts = TestStr()>>> ts<__main__.TestStr at 0x7fa91c314e50>>>> print ts[Value: hello, world!]你会发现,直接输出对象ts时并没有按我们str方法中定义的格式进行输出,而用print输出的信息却改变了
repr和str这两个方法都是用于显示的,str是面向用户的,而repr面向程序员。
打印操作会首先尝试str和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。
__ repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用str,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
当我们想所有环境下都统一显示的话,可以重构repr方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用str,而程序员在开发期间则使用底层的repr来显示,实际上str只是覆盖了repr以得到更友好的用户显示。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
问题你想改变对象实例的打印或显示输出,让它们更具可读性。解决方案要改变一个实例的字符串表示,可重新定义它的__str__()和__repr__()方法。例如:c
Pythonstr和repr的详解str可以将值转化为合理的字符串形式,以便用户可以理解;repr会以合法Python表达式的形式来表达值。举例如下:#str输
在python中,如果不重写自定义对象的__str__方法,打印出来的对象是一串类似于的字符串。这当然不是我们想要的结果。于是:通过对__str__方法的重写,
阅读到Strings中关于转换对象为字符串的内容,介绍了repr函数,趁着还没有真正了解Python面向对象的生疏与热度,感性上理解一下repr与str这两个函
可能比较low还是记录一下:str和repr的使用过程str是一个类型(int,long类似),同样她也可以作为一个工厂方法实例一个stringrepr是pyt