一、 引言

记得刚开始学习Python学习字符串相关内容的时候,查了很多资料,也做了些测试,对repr和str这两个函数的返回值老猿一直没有真正理解,因为测试发现这两个函数基本上输出时一样的。到现在老猿也不能说自己掌握Python的基础知识了,但到现在至少能说清楚repr和str这两个函数分别是干什么用的了。

前面几章分别介绍了__repr__方法和__str__方法的语法、作用、重写,并间或的进行了两者的一些关系说明,他们其实还对应了两个功用与方法一模一样的Python内置函数repr和str。本节对这两个方法进行一个对比分析,力争让看到本章节的你能很快弄明白二者的区别。

由于str内置函数与__str__方法功能相同,repr函数和__repr__方法功能相同,且这两个内置函数实际上就是调用类的这两个方法,为了说明简便,我们就不单独进行函数对比分析。

二、 __str__和 __repr__函数对比分析

  1. 二者的目的不同,__str__是为了给最终用户提供实例对象的信息,__repr__是给开发人员提供对象的信息;
  2. 由于目的不同,二者展示的信息应该不同,__str__应该提供用户容易理解的信息,将属性代码翻译成客户理解的文字说明,__repr__应该提供开发者容易使用的信息,最好是能够直接使用输出的信息直接拷贝部分或全部就能重定义一个对象,这些信息类似于集成环境下debug看内存数据对象的格式差不多;
  3. 二者触发调用的方式不同,__str__是在print(对象)、str(对象)等情况下调用,__repr__是在查看对象、repr(对象)等情况下调用;
  4. 当没有重写__str__方法但重写了__repr__方法时,触发调用__str__方法实际上就是调用__repr__方法。

    1>老猿认为,这是由于没有重写__str__方法时,__str__方法就是从父类继承的,而所有类的父类object应该是在__str__方法中直接调用了__repr__方法,导致自定义类继承的__str__方法中也是调用__repr__方法,而__repr__方法重写了,所以才是这样的结果。但以上结果老猿没有去核实源码,仅是自己的分析,暂时无法证明;

    2>老猿建议各位开发者在实现自己的自定义类时,至少重写 repr 方法,这能保证类到字符串始终有一个有效的自定义转换方式,并在与客户交互的类中,提供重写的__str__方法。
  5. 部分内置类如容器(指有元素的对象)使用str(对象)返回的也是__repr__对应的字符串内容,这也是为什么在交互模式下我们输入相关变量能直接看到变量的数据;
  6. 二者都是一种比较符合Python风格的内置方法,无需显示调用方法就可以触发.

本节对前面章节介绍的关于__repr__方法和__str__方法的使用和作用进行了一个对比分析,具体这两个方法的使用还是去参考前面的章节。

老猿Python,跟老猿学Python! 博客地址:https://blog.csdn.net/LaoYuanPython

第8.17节 Python __repr__方法和__str__方法、内置函数repr和str的异同点对比剖析的更多相关文章

  1. Python装饰器、生成器、内置函数、json

    这周学习了装饰器和生成器,写下博客,记录一下装饰器和生成器相关的内容. 一.装饰器 装饰器,这个器就是函数的意思,连起来,就是装饰函数,装饰器本身也是一个函数,它的作用是用来给其他函数添加新功能,比如 ...

  2. Python中字符串String的基本内置函数与过滤字符模块函数的基本用法

    Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...

  3. python基础7之python3的内置函数

    官方介绍: python3:https://docs.python.org/3/library/functions.html?highlight=built#ascii python2:https:/ ...

  4. python语言(四)关键字参数、内置函数、导入第三方模块、OS模块、时间模块

    一.可变参数 定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以).此时,可用包裹(packing)位置参数(*args),或者包裹关键字参数(**kwargs),来进行参数传递,会 ...

  5. python基础(14)-反射&类的内置函数

    反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...

  6. python之迭代器 生成器 枚举 常用内置函数 递归

    迭代器 迭代器对象:有__next__()方法的对象是迭代器对象,迭代器对象依赖__next__()方法进行依次取值 with open('text.txt','rb',) as f: res = f ...

  7. python之路:进阶篇 内置函数

     li = [11, 22, 33] news = map(  li = [100, 2200, 3300] news = map(  [13, 24, 35] [11, 11, 11] [22, 4 ...

  8. python的文件操作file:(内置函数,如seek、truncate函数)

    file打开文件有两种方式,函数用file()或者open().打开后读入文件的内容用read()函数,其读入是从文件当前指针位置开始,所以需要控制指针位置用: 一.先介绍下file读入的控制函数: ...

  9. 【python深入】map/reduce/lambda 内置函数的使用

    python中的内置函数里面,有map和reduce两个方法,这两个方法可以非常好的去做一些事情,但是之前都没有用过,下面是关于这两个方法的介绍: 一.map相关 map()会根据提供的函数对指定的序 ...

随机推荐

  1. HTML+JavaScript实现一个简单抽奖功能

    为什么会做这个东西呢,纯属好玩,闲的其实是在上次班会的时候想到的,班会的时候叫人回答问题,没人回答当时就想,我如果抽签抽到你了,你还是不回答吗??好吧,一切都是扯淡先来看看页面效果吧:点击抽取就可以抽 ...

  2. map,filter

    def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [i for i in range(0,5)]) print(list(newlis ...

  3. Flutter(75):Sliver组件之SliverFixedExtentList

    Flutter教学目录持续更新中 Github源代码持续更新中 1.SliverFixedExtentList 可以固定Item高度的SliverList 2.SliverFixedExtentLis ...

  4. 仿select下拉框

    默认状态下,灰色面板出现.当点击页面按钮以及灰色面板外区域时,面板消失;点击按钮,灰色面板出现;点击灰色面板区域,面板不能消失. 主要考察:事件冒泡与取消事件冒泡. 代码: <!DOCTYPE ...

  5. [MIT6.006] 21. Daynamic Programming III: Parenthesization, Edit Distance, Knapsack 动态规划III:括号问题,编辑距离,背包问题

    这节课主要针对字符串/序列上的问题,了解如果使用动态规划进行求解.上节课我们也讲过使用前缀和后缀的概念,他们如下所示: 接下来,我们通过三个问题来深入了解下动态规划使用前缀.后缀和子串怎么去解决括号问 ...

  6. fcntl函数用法——操纵文件描述符状态

    fcntl函数:操纵文件描述符,改变已经打开的文件的属性int fcntl(int fd, int cmd, ... //arg  );cmd选项:一.复制文件描述符:F_DUPFD二.更改设置文件描 ...

  7. Android 架构组件-Lifecycle、LiveData、ViewModel

    Lifecycle Lifecycle组件包括LifecycleOwner.LifecleObserver,能方便监听Activity或者Fragment的生命周期. 步骤: 1.实现Lifecycl ...

  8. 分布式 task_master / task_worker

    17:08:0317:08:04 在Thread(线程)和Process(进程)中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分 ...

  9. vue中插值表达式中时间转换yyyy-MM-dd HH:mm:ss

    vue插值表达式中将时间转换两种方式:一.定义方法 <div id="app">当前实时时间:{{dateFormat(date)}}</div> //时间 ...

  10. FL Studio时间面板讲解

    今天我们一起来学习一下FL Studio时间面板的知识.看到这个名词我们一定就会想到该功能跟时间是脱不了关系的,是的,它就是用来显示时间的.它显示当前时间的方法不是很单一,而是有好几个,具体有哪几个下 ...