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爬虫之网页图片抓取的方法
Jul 16 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
让代码变得更易维护的7个Python库
Oct 09 Python
使用python制作一个为hex文件增加版本号的脚本实例
Jun 12 Python
打包python 加icon 去掉cmd黑窗口方法
Jun 24 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
Python根据服务获取端口号的方法
Sep 25 Python
使用Python实现Wake On Lan远程开机功能
Jan 22 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
python mock测试的示例
Oct 19 Python
pytorch简介
Nov 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
ie6 动态缩略图不显示的原因
2009/06/21 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
PHP实现发送微博消息功能完整示例
2019/12/04 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
基于JQuery的一个简单的鼠标跟随提示效果
2010/09/23 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
[04:27]DOTA2官方论坛水友赛集锦
2013/09/16 DOTA
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
20个常用Python运维库和模块
2018/02/12 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
pytorch 数据集图片显示方法
2018/07/26 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
python通过文本在一个图中画多条线的实例
2020/02/21 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
利用纯CSS3实现文字向右循环闪过效果实例(可用于移动端)
2017/06/15 HTML / CSS
5个你不知道的HTML5的接口介绍
2013/08/07 HTML / CSS
Bloomingdale’s阿联酋:选购奢华时尚、美容及更多
2020/09/22 全球购物
甜品蛋糕店创业计划书
2014/09/21 职场文书
酒店保洁员岗位职责
2015/02/26 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
nginx反向代理配置去除前缀案例教程
2021/07/26 Servers
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
MySQL详细讲解变量variables的用法
2022/06/21 MySQL