第8.17节 Python __repr__方法和__str__方法、内置函数repr和str的异同点对比剖析
一、 引言
记得刚开始学习Python学习字符串相关内容的时候,查了很多资料,也做了些测试,对repr和str这两个函数的返回值老猿一直没有真正理解,因为测试发现这两个函数基本上输出时一样的。到现在老猿也不能说自己掌握Python的基础知识了,但到现在至少能说清楚repr和str这两个函数分别是干什么用的了。
前面几章分别介绍了__repr__方法和__str__方法的语法、作用、重写,并间或的进行了两者的一些关系说明,他们其实还对应了两个功用与方法一模一样的Python内置函数repr和str。本节对这两个方法进行一个对比分析,力争让看到本章节的你能很快弄明白二者的区别。
由于str内置函数与__str__方法功能相同,repr函数和__repr__方法功能相同,且这两个内置函数实际上就是调用类的这两个方法,为了说明简便,我们就不单独进行函数对比分析。
二、 __str__和 __repr__函数对比分析
- 二者的目的不同,__str__是为了给最终用户提供实例对象的信息,__repr__是给开发人员提供对象的信息;
- 由于目的不同,二者展示的信息应该不同,__str__应该提供用户容易理解的信息,将属性代码翻译成客户理解的文字说明,__repr__应该提供开发者容易使用的信息,最好是能够直接使用输出的信息直接拷贝部分或全部就能重定义一个对象,这些信息类似于集成环境下debug看内存数据对象的格式差不多;
- 二者触发调用的方式不同,__str__是在print(对象)、str(对象)等情况下调用,__repr__是在查看对象、repr(对象)等情况下调用;
- 当没有重写__str__方法但重写了__repr__方法时,触发调用__str__方法实际上就是调用__repr__方法。
1>老猿认为,这是由于没有重写__str__方法时,__str__方法就是从父类继承的,而所有类的父类object应该是在__str__方法中直接调用了__repr__方法,导致自定义类继承的__str__方法中也是调用__repr__方法,而__repr__方法重写了,所以才是这样的结果。但以上结果老猿没有去核实源码,仅是自己的分析,暂时无法证明;
2>老猿建议各位开发者在实现自己的自定义类时,至少重写 repr 方法,这能保证类到字符串始终有一个有效的自定义转换方式,并在与客户交互的类中,提供重写的__str__方法。 - 部分内置类如容器(指有元素的对象)使用str(对象)返回的也是__repr__对应的字符串内容,这也是为什么在交互模式下我们输入相关变量能直接看到变量的数据;
- 二者都是一种比较符合Python风格的内置方法,无需显示调用方法就可以触发.
本节对前面章节介绍的关于__repr__方法和__str__方法的使用和作用进行了一个对比分析,具体这两个方法的使用还是去参考前面的章节。
老猿Python,跟老猿学Python! 博客地址:https://blog.csdn.net/LaoYuanPython
第8.17节 Python __repr__方法和__str__方法、内置函数repr和str的异同点对比剖析的更多相关文章
- Python装饰器、生成器、内置函数、json
这周学习了装饰器和生成器,写下博客,记录一下装饰器和生成器相关的内容. 一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如 ...
- Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...
- python基础7之python3的内置函数
官方介绍: python3:https://docs.python.org/3/library/functions.html?highlight=built#ascii python2:https:/ ...
- python语言(四)关键字参数、内置函数、导入第三方模块、OS模块、时间模块
一.可变参数 定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以).此时,可用包裹(packing)位置参数(*args),或者包裹关键字参数(**kwargs),来进行参数传递,会 ...
- python基础(14)-反射&类的内置函数
反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...
- python之迭代器 生成器 枚举 常用内置函数 递归
迭代器 迭代器对象:有__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行依次取值 with open('text.txt','rb',) as f: res = f ...
- python之路:进阶篇 内置函数
li = [11, 22, 33] news = map( li = [100, 2200, 3300] news = map( [13, 24, 35] [11, 11, 11] [22, 4 ...
- python的文件操作file:(内置函数,如seek、truncate函数)
file打开文件有两种方式,函数用file()或者open().打开后读入文件的内容用read()函数,其读入是从文件当前指针位置开始,所以需要控制指针位置用: 一.先介绍下file读入的控制函数: ...
- 【python深入】map/reduce/lambda 内置函数的使用
python中的内置函数里面,有map和reduce两个方法,这两个方法可以非常好的去做一些事情,但是之前都没有用过,下面是关于这两个方法的介绍: 一.map相关 map()会根据提供的函数对指定的序 ...
随机推荐
- ArrayList使用及原理
之前面试时,经常被问到ArrayList的原理,今天整理了一些ArrayList的使用原理和必问的知识点. ArrayList的继承关系 定义一个ArrayList的方法 ArrayList的三个构造 ...
- Hadoop调优 | NameNode主备宕机引发的思考
大家都知道在双十一这些电商大型营销活动期间,电商网站的访问量等是平时的N倍.每当这个时候到来,无论是开发还是运维人员都严阵以待生怕服务出现问题.很不幸,笔者的一个朋友在一家电商公司上班,在双十一时,恰 ...
- Pycharm激活码无偿分享,2020年最新Pycharm永久激活码!
2020年10月7日08:04:34更新的Pycharm激活码,还热乎着呢,速用~ 如果下边的这个Pycharm激活码过期失效了的话,大家可以关注我的微信公众号:Python联盟,然后回复" ...
- .net core中的哪些过滤器
前言 书承接上文,咱们上回说到,.net core中各种日志框架, 今天我讲讲.net core中的内置过滤器吧! 1.什么是过滤器? ASP.NET Core中的筛选器允许代码在请求处理管道中的特定 ...
- 【java】校验当前时间是否在规定的时间内
废话不多说直接贴代码. 我的日期格式是 8:00-22:00 要用的自己换下格式哈. public class CheckClosingTimeUtil { /** * 校验当前时间是否在规定时间内 ...
- TP5 RCE
Thinkphp5 RCE 复现 环境: win10+wamp+thinkphp5.1.29 下载地址 源码分析 程序首先跳转到 public目录下的index.php,然后执行 thinkphp/l ...
- 邻居子系统1.5 neigh output
1.5.1 当邻居项不处于NUD_CONNECTD状态时,不允许快速路径发送报文,函数neigh_resolve_output 用于慢而安全的输出,通常用初始化neigh_ops结构 来实例outpu ...
- 11.java设计模式之享元模式
基本需求: 小型的外包项目,给客户A做一个产品展示网站,客户A的朋友感觉效果不错,也希望做这样的产品展示网站,但是要求都有些不同 每个客户要求发布的方式不一样,A要求以新闻的方式发布,B要求以博客的方 ...
- 测试_QTP使用实例
1. QTP简介 1.1QTP功能与特点 QTP是QuickTest Professional的简称,是一种自动化软件测试工具.在软件的测试过程中,QTP主要来用来通过已有的测试脚本执行重复的手动测试 ...
- Charles mock数据详解
Charles是一款非常好用的代理工具,关于Charles的安装.破解.安装证书,连接手机代理等使用方法详见我之前的博客:https://www.cnblogs.com/feng0815/p/8043 ...