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下singleton模式的实现方法
Jul 16 Python
python实现忽略大小写对字符串列表排序的方法
Sep 25 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
Jun 23 Python
python实现字符串和字典的转换
Sep 29 Python
在Python dataframe中出生日期转化为年龄的实现方法
Oct 20 Python
django2笔记之路由path语法的实现
Jul 17 Python
django-初始配置(纯手写)详解
Jul 30 Python
Django用数据库表反向生成models类知识点详解
Mar 25 Python
Python装饰器实现方法及应用场景详解
Mar 26 Python
记一次Django响应超慢的解决过程
Sep 17 Python
python爬虫今日热榜数据到txt文件的源码
Feb 23 Python
Pyqt5将多个类组合在一个界面显示的完整示例
Sep 04 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的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
C#静态方法与非静态方法实例分析
2014/09/22 PHP
四个PHP非常实用的功能
2015/09/29 PHP
EasyUI中的tree用法介绍
2011/11/01 Javascript
javascript实现json页面分页实例代码
2014/02/20 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
jquery复选框多选赋值给文本框的方法
2015/01/27 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
React Native自定义控件底部抽屉菜单的示例
2018/02/08 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
Node使用koa2实现一个简单JWT鉴权的方法
2021/01/26 Javascript
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
基于python socketserver框架全面解析
2017/09/21 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
python-opencv 将连续图片写成视频格式的方法
2019/01/08 Python
用python做游戏的细节详解
2019/06/25 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
上课说话检讨书大全
2014/01/22 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
高二化学教学反思
2014/01/30 职场文书
六一领导慰问欢迎词
2015/01/26 职场文书
中学生自我评价2015
2015/03/03 职场文书
在职证明书模板
2015/06/15 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
如何利用STAR法则制作留学文书?
2019/08/26 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery