Python中__repr__和__str__区别详解


Posted in Python onNovember 07, 2019

看下面的例子就明白了

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以得到更友好的用户显示。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python Mysql自动备份脚本
Jul 14 Python
python数据结构之二叉树的统计与转换实例
Apr 29 Python
MySQLdb ImportError: libmysqlclient.so.18解决方法
Aug 21 Python
Python isinstance函数介绍
Apr 14 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
PyQt4实现下拉菜单可供选择并打印出来
Apr 20 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
python、PyTorch图像读取与numpy转换实例
Jan 13 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
Mar 10 Python
基于python实现模拟数据结构模型
Jun 12 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 #Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 #Python
Python中xml和dict格式转换的示例代码
Nov 07 #Python
python对象转字典的两种实现方式示例
Nov 07 #Python
python多线程高级锁condition简单用法示例
Nov 07 #Python
python文件操作的简单方法总结
Nov 07 #Python
详解Django admin高级用法
Nov 06 #Python
You might like
destoon实现不同会员组公司名称显示不同的颜色的方法
2014/08/22 PHP
php生成年月日下载列表的方法
2015/04/24 PHP
PHP的APC模块实现上传进度条
2015/10/27 PHP
基于thinkPHP实现的微信自定义分享功能示例
2016/09/23 PHP
PHP实现的简单异常处理类示例
2017/05/04 PHP
PDO::exec讲解
2019/01/28 PHP
js内置对象 学习笔记
2011/08/01 Javascript
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
vue.js使用watch监听路由变化的方法
2018/07/08 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
微信小程序-form表单提交代码实例
2019/04/29 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
python操作MongoDB基础知识
2013/11/01 Python
Python中的模块导入和读取键盘输入的方法
2015/10/16 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
python命令行参数用法实例分析
2019/06/25 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
Sneaker Studio乌克兰:购买运动鞋
2018/03/26 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
Java面试笔试题大全
2016/11/23 面试题
个人简历自荐信
2013/12/05 职场文书
企业活动策划方案
2014/06/02 职场文书
高中生第一学年自我鉴定2015
2014/09/28 职场文书
努力工作保证书
2015/02/28 职场文书
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技