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简单实现子网掩码转换的方法
Apr 13 Python
Python实现的十进制小数与二进制小数相互转换功能
Oct 12 Python
Python实现冒泡排序的简单应用示例
Dec 11 Python
python脚本实现验证码识别
Jun 07 Python
Python中fnmatch模块的使用详情
Nov 30 Python
Python设计模式之外观模式实例详解
Jan 17 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
Jun 19 Python
pow在python中的含义及用法
Jul 11 Python
Python过滤序列元素的方法
Jul 31 Python
python实现PolynomialFeatures多项式的方法
Jan 06 Python
python绘制汉诺塔
Mar 01 Python
分享Python获取本机IP地址的几种方法
Mar 17 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 批量删除数据的方法分析
2009/10/30 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
yii操作session实例简介
2014/07/31 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
jquery的map与get方法详解
2013/11/04 Javascript
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
全面详细的jQuery常见开发技巧手册
2016/02/21 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
AngularJS 在同一个界面启动多个ng-app应用模块详解
2016/12/20 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法
2017/06/29 Javascript
最新Javascript程序员面试试题和解题方法
2017/11/23 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vue集成chart.js的实现方法
2019/08/20 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[02:41]辉夜杯现场一家三口 “我爸玩风行 我玩血魔”
2015/12/27 DOTA
python pandas中对Series数据进行轴向连接的实例
2018/06/08 Python
python的scipy实现插值的示例代码
2019/11/12 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
意大利单身交友网站:Meetic
2020/07/12 全球购物
证婚人经典证婚词
2014/01/09 职场文书
同学会邀请书大全
2014/01/12 职场文书
大学生英语演讲稿
2014/04/24 职场文书
新郎新娘答谢词
2015/01/04 职场文书
升职感谢信
2015/01/22 职场文书
Python selenium模拟网页点击爬虫交管12123违章数据
2021/05/26 Python
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python
Java版 单机五子棋
2022/05/04 Java/Android