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实现方法
Nov 18 Python
定制FileField中的上传文件名称实例
Aug 23 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 Python
在OpenCV里实现条码区域识别的方法示例
Dec 04 Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 Python
Tensorflow 1.0之后模型文件、权重数值的读取方式
Feb 12 Python
python代码xml转txt实例
Mar 10 Python
python根据字典的键来删除元素的方法
Aug 16 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
PyTorch中的torch.cat简单介绍
Mar 17 Python
Python进程池与进程锁之语法学习
Apr 11 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
Adnroid 微信内置浏览器清除缓存
2016/07/11 PHP
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
uni-app实现获取验证码倒计时功能
2020/11/01 Javascript
Python中使用gzip模块压缩文件的简单教程
2015/04/08 Python
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Python中List.index()方法的使用教程
2015/05/20 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
python定向爬虫校园论坛帖子信息
2018/07/23 Python
Python爬虫实现爬取百度百科词条功能实例
2019/04/05 Python
python自动保存百度盘资源到百度盘中的实例代码
2019/08/26 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
详解CSS3实现响应式手风琴效果
2020/06/10 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
PHP面试题大全
2015/10/16 面试题
在C语言中实现抽象数据类型什么方法最好
2014/06/26 面试题
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
一封普通求职者的求职信
2013/11/20 职场文书
电子商务专业学生的自我鉴定
2013/11/28 职场文书
给领导的致歉信范文
2014/01/13 职场文书
同学聚会欢迎辞
2014/01/14 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
反腐倡廉标语
2014/06/24 职场文书
婚前协议书标准版
2014/10/19 职场文书
布达拉宫导游词
2015/02/02 职场文书
认识实习感想
2015/08/10 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
七年级作文之冬景
2019/11/07 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript