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实现上传样本到virustotal并查询扫描信息的方法
Oct 05 Python
Python中的各种装饰器详解
Apr 11 Python
在Python中使用PIL模块对图片进行高斯模糊处理的教程
May 05 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
python实现图片变亮或者变暗的方法
Jun 01 Python
python数据结构之列表和元组的详解
Sep 23 Python
详解用python实现简单的遗传算法
Jan 02 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
用Python生成HTML表格的方法示例
Mar 06 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
Nov 18 Python
python中HTMLParser模块知识点总结
Jan 25 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
php array_search() 函数使用
2010/04/13 PHP
PHP乱码问题,UTF-8乱码常见问题小结
2012/04/09 PHP
使用Linux五年积累的一些经验技巧
2013/06/20 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
美图秀秀web开放平台--PHP流式上传和表单上传示例分享
2014/06/22 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
两个多选select(multiple左右)添加、删除选项和取值实例
2014/05/12 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
图片懒加载插件实例分享(含解析)
2017/01/09 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
微信小程序实现美团菜单
2018/06/06 Javascript
ios中视频的最后一桢问题解决
2019/05/14 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
[36:29]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs TNC
2018/04/02 DOTA
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
详解Python当中的字符串和编码
2015/04/25 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
美国钻石商店:Zales
2016/11/20 全球购物
如何写一个自定义标签
2012/12/28 面试题
法学专业个人求职信
2013/09/26 职场文书
加工操作管理制度
2014/01/19 职场文书
留学经费担保书
2014/05/12 职场文书
小学生安全责任书
2014/07/25 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
家长通知书家长意见
2014/12/30 职场文书
军训结束新闻稿
2015/07/17 职场文书
Python可视化神器pyecharts绘制水球图
2022/07/07 Python