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中编写并发程序
Feb 27 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
pandas DataFrame数据转为list的方法
Apr 11 Python
Python实现的维尼吉亚密码算法示例
Apr 12 Python
python对象与json相互转换的方法
May 07 Python
python版DDOS攻击脚本
Jun 12 Python
Python 中list ,set,dict的大规模查找效率对比详解
Oct 11 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
如何把外网python虚拟环境迁移到内网
May 18 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
vscode调试django项目的方法
Aug 06 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
Jan 27 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上传图片类及用法示例
2016/05/11 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
Laravel 实现添加多语言提示信息
2019/10/25 PHP
Js 获取HTML DOM节点元素的方法小结
2009/04/24 Javascript
Jquery中LigerUi的弹出编辑框(实现方法)
2013/07/09 Javascript
将两个div左右并列显示并实现点击标题切换内容
2013/10/22 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
2014年最火的Node.JS后端框架推荐
2014/10/27 Javascript
基于Css3和JQuery实现打字机效果
2015/08/11 Javascript
jQuery实现气球弹出框式的侧边导航菜单效果
2015/09/22 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
JavaScript对象数组如何按指定属性和排序方向进行排序
2016/06/15 Javascript
Angularjs CURD 详解及实例代码
2016/09/14 Javascript
Javascript动画效果(1)
2016/10/11 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
socket.io与pm2(cluster)集群搭配的解决方案
2017/06/02 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
Nodejs实现用户注册功能
2019/04/14 NodeJs
使用 Vue cli 3.0 构建自定义组件库的方法
2019/04/30 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
The North Face北面德国官网:美国著名户外品牌
2018/12/12 全球购物
NYX Professional Makeup俄罗斯官网:世界知名的化妆品品牌
2019/12/26 全球购物
酒店管理毕业生自荐信
2014/05/25 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
个人租房协议书样本
2014/10/01 职场文书
自我推荐信格式模板
2015/03/24 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
解析Java异步之call future
2021/06/14 Java/Android