时间:2021-05-22
阅读到 Strings 中关于转换对象为字符串的内容,介绍了 repr 函数,趁着还没有真正了解 Python 面向对象的生疏与热度,感性上理解一下 repr 与 str 这两个函数的区别。
Python 的全局方法 repr 和 str 会映射到对象的 __repr__ 和 __str__ 的方法调用,还有 str(obj) 时会调用哪个方法,以及 print(obj) 和调试 Python 代码时的对象显示会调用哪个方法呢?这就是本文想要印证的内容。
恰如 Java 的 System.out.println(obj) 或 "hello" + obj 都会调用 Java 对象的 toString() 方法,那么 Python 中是怎么一回事呢?
来自某本 Python 入门书的解释 repr 和 str:
首先 repr 是 representation 的意思,一个是正式,另一个是非正式,看起来 repr 比 str 显得重要些。
对于内置的 Python 对象我们可以用 repr, print, 和 str 函数,如针对 list 类型
>>> repr([1,2])'[1, 2]'>>> print([1,2])[1, 2]>>> str([1,2])'[1, 2]'但是具体上面三个函数中分别调用了 list 的什么方法就不可而知了,这时候定义一个自己的类最能说明问题。测试环境为 IntelliJ, 以调试截图来说明分别为 __str__ 和 __repr__ 几种组合情况
只定义了 __str__ 方法
说明:在只定义了 __str__ 方法的情况下
只定义了 __repr__ 方法
说明:在只定义了 __repr__ 方法的情况下,可以看出 __repr__ 方法极其强势,它垄断了一切的调用,repr, str, 和 print 函数,甚至是 IntelliJ 的调试显示都必须以 __repr__ 方法为核心。
同时定义了 __repr__ 和 __str__ 方法
说明:在同时定义了 __repr__ 和 __str__ 方法的情况下,__str__ 方法反而能扳回来。除了明确的 repr 会调用 __repr__ 方法,和调试时变量窗口中显示对象会调用 __repr__ 方法外,其他时候都是 __str__ 占优。具体为
另外,格式化字符串时的调用的对象方法与 print 时是一样的,例如下面的格式化代码
f1 = "%s" % tf2 = "{}".format(t)Python 不知道像 Java 那样由字符串加上一个对象
"this is " + t #Java 中会展开为 "this is " + t.toString()Python 会报以下错误
TypeError: can only concatenate str (not "Test") to str
说这里的 + 号只能连接两个字符串,除非定义了 __add__ 和 __radd__ 方法,对应关系分别为
t = Test()z1 = 'hello' + t #相当于 t.__radd__('hello')z2 = t + 'hello' #相当于 t.__add__('hello')Python 的 __xyz__ 也挺魔幻的。
以上就是Python 的 __str__ 和 __repr__ 方法对比的详细内容,更多关于Python __str__ 和 __repr__ 的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
问题你想改变对象实例的打印或显示输出,让它们更具可读性。解决方案要改变一个实例的字符串表示,可重新定义它的__str__()和__repr__()方法。例如:c
在python中,如果不重写自定义对象的__str__方法,打印出来的对象是一串类似于的字符串。这当然不是我们想要的结果。于是:通过对__str__方法的重写,
Pythonstr和repr的详解str可以将值转化为合理的字符串形式,以便用户可以理解;repr会以合法Python表达式的形式来表达值。举例如下:#str输
可能比较low还是记录一下:str和repr的使用过程str是一个类型(int,long类似),同样她也可以作为一个工厂方法实例一个stringrepr是pyt
下面先给大家介绍python实现版本号对比功能,具体内容如下所示:相同位置版本号大小比较:defabc(str1,str2):ifstr1==""orstr2=