Python改变对象的字符串显示的方法


Posted in Python onAugust 01, 2020

问题

你想改变对象实例的打印或显示输出,让它们更具可读性。

解决方案

要改变一个实例的字符串表示,可重新定义它的 __str__() 和 __repr__() 方法。例如:

class Pair:
  def __init__(self, x, y):
    self.x = x
    self.y = y

  def __repr__(self):
    return 'Pair({0.x!r}, {0.y!r})'.format(self)

  def __str__(self):
    return '({0.x!s}, {0.y!s})'.format(self)

__repr__() 方法返回一个实例的代码表示形式,通常用来重新构造这个实例。 内置的 repr() 函数返回这个字符串,跟我们使用交互式解释器显示的值是一样的。 __str__() 方法将实例转换为一个字符串,使用 str() print() 函数会输出这个字符串。比如:

>>> p = Pair(3, 4)
>>> p
Pair(3, 4) # __repr__() output
>>> print(p)
(3, 4) # __str__() output
>>>

我们在这里还演示了在格式化的时候怎样使用不同的字符串表现形式。 特别来讲,!r 格式化代码指明输出使用 __repr__() 来代替默认的 __str__() 。 你可以用前面的类来试着测试下:

>>> p = Pair(3, 4)
>>> print('p is {0!r}'.format(p))
p is Pair(3, 4)
>>> print('p is {0}'.format(p))
p is (3, 4)
>>>

讨论

自定义 __repr__() __str__() 通常是很好的习惯,因为它能简化调试和实例输出。 例如,如果仅仅只是打印输出或日志输出某个实例,那么程序员会看到实例更加详细与有用的信息。

__repr__() 生成的文本字符串标准做法是需要让 eval(repr(x)) == x 为真。 如果实在不能这样子做,应该创建一个有用的文本表示,并使用 < 和 > 括起来。比如:

>>> f = open('file.dat')
>>> f
<_io.TextIOWrapper name='file.dat' mode='r' encoding='UTF-8'>
>>>

如果 __str__() 没有被定义,那么就会使用 __repr__() 来代替输出。

上面的 format() 方法的使用看上去很有趣,格式化代码 {0.x} 对应的是第1个参数的x属性。 因此,在下面的函数中,0实际上指的就是 self 本身:

def __repr__(self):
  return 'Pair({0.x!r}, {0.y!r})'.format(self)

作为这种实现的一个替代,你也可以使用 % 操作符,就像下面这样:

def __repr__(self):
  return 'Pair(%r, %r)' % (self.x, self.y)

以上就是Python改变对象的字符串显示的方法的详细内容,更多关于Python改变对象的字符串显示的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
简单学习Python time模块
Apr 29 Python
用matplotlib画等高线图详解
Dec 14 Python
python3中os.path模块下常用的用法总结【推荐】
Sep 16 Python
Python程序打包工具py2exe和PyInstaller详解
Jun 28 Python
python实现点击按钮修改数据的方法
Jul 17 Python
python中bs4.BeautifulSoup的基本用法
Jul 27 Python
Python 私有化操作实例分析
Nov 21 Python
用python画一只可爱的皮卡丘实例
Nov 21 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
五分钟带你搞懂python 迭代器与生成器
Aug 30 Python
selenium学习教程之定位以及切换frame(iframe)
Jan 04 Python
Python 如何定义匿名或内联函数
Aug 01 #Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 #Python
Python如何读写二进制数组数据
Aug 01 #Python
Python将字典转换为XML的方法
Aug 01 #Python
Python Flask异步发送邮件实现方法解析
Aug 01 #Python
Python实现弹球小游戏
Aug 01 #Python
序列化Python对象的方法
Aug 01 #Python
You might like
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
Linux下将excel数据导入到mssql数据库中的方法
2010/02/08 PHP
smarty模板引擎之内建函数用法
2015/03/30 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
jQuery实现提示密码强度的代码
2015/07/15 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
JavaScript  cookie 跨域访问之广告推广
2016/04/20 Javascript
JS实现的数字格式化功能示例
2017/02/10 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
解决webpack无法通过IP地址访问localhost的问题
2018/02/22 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
使用layer模态框给新页面传值的方法
2019/09/27 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python通过OpenCV的findContours获取轮廓并切割实例
2018/01/05 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
几款好用的python工具库(小结)
2020/10/20 Python
HTML5中div、article、section的区别及使用介绍
2013/08/14 HTML / CSS
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
美国购买韩国护肤和美容产品网站:Althea Korea
2020/11/16 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
法律进企业活动方案
2014/03/04 职场文书
工会经费申请报告
2015/05/15 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
门面租赁合同范文
2019/08/06 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python
Spring Cloud Gateway去掉url前缀
2021/07/15 Java/Android
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android