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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
轻松掌握python设计模式之访问者模式
Nov 18 Python
python通过pip更新所有已安装的包实现方法
May 19 Python
python 在屏幕上逐字显示一行字的实例
Dec 24 Python
浅谈python的深浅拷贝以及fromkeys的用法
Mar 08 Python
python 字典的打印实现
Sep 26 Python
在vscode中配置python环境过程解析
Sep 28 Python
浅析PEP572: 海象运算符
Oct 15 Python
Python 使用type来定义类的实现
Nov 19 Python
Python检测端口IP字符串是否合法
Jun 05 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
Aug 02 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 addslashes 函数详细分析说明
2009/06/23 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
IE不支持getElementsByClassName最终完美解决方案
2012/12/17 Javascript
jQuery实现的淡入淡出二级菜单效果代码
2015/09/15 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
基于webpack4.X从零搭建React脚手架的方法步骤
2018/12/23 Javascript
vue使用vuex实现首页导航切换不同路由的方法
2019/05/08 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
python操作oracle的完整教程分享
2018/01/30 Python
详解将Django部署到Centos7全攻略
2018/09/26 Python
微信小程序python用户认证的实现
2019/07/29 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
python 利用已有Ner模型进行数据清洗合并代码
2019/12/24 Python
jupyter 导入csv文件方式
2020/04/21 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
奥地利领先的在线药房:SHOP APOTHEKE
2019/10/07 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
管理部部长岗位职责
2013/12/05 职场文书
葬礼司仪主持词
2014/03/31 职场文书
法院信息化建设方案
2014/05/21 职场文书
小学生志愿者活动方案
2014/08/23 职场文书
质监局领导班子践行群众路线整改方案
2014/10/26 职场文书
党的群众路线教育实践活动个人对照检查材料(四风)
2014/11/05 职场文书
2015年社区文体活动总结
2015/03/25 职场文书
小学六一主持词开场白
2015/05/28 职场文书
房产证明范本
2015/06/19 职场文书
Sql Server之数据类型详解
2022/02/28 SQL Server