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函数学习笔记
Oct 07 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
windows系统下Python环境的搭建(Aptana Studio)
Mar 06 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
Feb 24 Python
python pandas 对series和dataframe的重置索引reindex方法
Jun 07 Python
Python中super函数用法实例分析
Mar 18 Python
python实现爬山算法的思路详解
Apr 09 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
python文件和文件夹复制函数
Feb 07 Python
python列表的逆序遍历实现
Apr 20 Python
jupyter notebook 写代码自动补全的实现
Nov 02 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
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
js获取视频时长代码
2014/04/10 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
javascript使用prototype完成单继承
2014/12/24 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
Vue-Router实现组件间跳转的三种方法
2017/11/07 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
vue动态绘制四分之三圆环图效果
2019/09/03 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
python 获取当天每个准点时间戳的实例
2018/05/22 Python
pycharm中成功运行图片的配置教程
2018/10/28 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
Python字典对象实现原理详解
2019/07/01 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
2019/08/09 Python
Python如何计算语句执行时间
2019/11/22 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
Python如何输出警告信息
2020/07/30 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
JBL英国官网:JBL UK
2018/07/04 全球购物
个人先进事迹总结
2015/02/26 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
2015年公务员个人工作总结
2015/04/24 职场文书
故意杀人案辩护词
2015/05/21 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
光荣之路观后感
2015/06/12 职场文书
圣贤教育改变命运观后感
2015/06/16 职场文书
2016年父亲节寄语
2015/12/04 职场文书
Python连接Postgres/Mysql/Mongo数据库基本操作大全
2021/06/29 Python
一级电子管军用接收机测评
2022/04/05 无线电
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python