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 用户登录验证的小例子
Mar 06 Python
python中的多线程实例教程
Aug 27 Python
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Python读取文件内容的三种常用方式及效率比较
Oct 07 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
python logging 日志的级别调整方式
Feb 21 Python
解决阿里云邮件发送不能使用25端口问题
Aug 07 Python
windows安装python超详细图文教程
May 21 Python
Python+Appium实现自动抢微信红包
May 21 Python
Python机器学习之底层实现KNN
Jun 20 Python
pandas中关于apply+lambda的应用
Feb 28 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
PHP读取ACCESS数据到MYSQL的代码
2011/05/11 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
orm获取关联表里的属性值
2016/04/17 PHP
Laravel 5使用Laravel Excel实现Excel/CSV文件导入导出的功能详解
2017/10/11 PHP
php json转换相关知识(小结)
2018/12/21 PHP
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
javascript showModalDialog 内跳转页面的问题
2010/11/25 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
基于JavaScript实现右键菜单和拖拽功能
2016/11/28 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
Angular5集成eventbus的示例代码
2018/07/19 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
JS异步错误捕获的一些事小结
2019/04/26 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
用tensorflow构建线性回归模型的示例代码
2018/03/05 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
2019/03/22 Python
python 类之间的参数传递方式
2019/12/20 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
公益活动策划方案
2014/01/09 职场文书
社区工作者思想汇报
2014/01/13 职场文书
四风对照检查材料思想汇报
2014/09/20 职场文书
团代会开幕词
2015/01/28 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
煤矿安全学习心得体会
2016/01/18 职场文书
Vue2.0搭建脚手架
2022/03/13 Vue.js