首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 19:02
  • 4167
  • 5631
blog.csdn.net

一、 引言
记得刚开始学习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! 博客地址:http://iyenn.com/index/link?url=https://blog.csdn.net/LaoYuanPython

文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树基础语法常用内置函数333596 人正在系统学习中
老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI
注:本文转载自blog.csdn.net的LaoYuanPython的文章"https://blog.csdn.net/LaoYuanPython/article/details/94586884"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top