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图像灰度变换及图像数组操作
Jan 27 Python
Python基于回溯法子集树模板解决0-1背包问题实例
Sep 02 Python
python利用dir函数查看类中所有成员函数示例代码
Sep 08 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
为什么入门大数据选择Python而不是Java?
Mar 07 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
python 反向输出字符串的方法
Jul 16 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
numpy的Fancy Indexing和array比较详解
Jun 11 Python
Python Tkinter图形工具使用方法及实例解析
Jun 15 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 Python
PyCharm最新激活码(2020/10/27全网最新)
Oct 27 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获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
基于PHP实现简单的随机抽奖小程序
2016/01/05 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
PHP安装memcache扩展的步骤讲解
2019/02/14 PHP
jquery动画1.加载指示器
2012/08/24 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
针对JavaScript中this指向的简单理解
2016/08/26 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
微信小程序一周时间表功能实现
2019/10/17 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
利用Python获取操作系统信息实例
2016/09/02 Python
Python利用ElementTree模块处理XML的方法详解
2017/08/31 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
python中加背景音乐如何操作
2020/07/19 Python
python利用faker库批量生成测试数据
2020/10/15 Python
Python txt文件如何转换成字典
2020/11/03 Python
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
2015年招生工作总结
2015/05/04 职场文书
欢迎新生标语2015
2015/07/16 职场文书
申请吧主发表的感言
2015/08/03 职场文书
学校食堂管理制度
2015/08/04 职场文书
2015年物业管理员工工作总结
2015/10/15 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS
Javascript 解构赋值详情
2021/11/17 Javascript
Python实现数据的序列化操作详解
2022/07/07 Python