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 28 Python
对Python使用mfcc的两种方式详解
Jan 09 Python
利用pyinstaller打包exe文件的基本教程
May 02 Python
Python代码太长换行的实现
Jul 05 Python
python 数据提取及拆分的实现代码
Aug 26 Python
python实现TCP文件传输
Mar 20 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
Python使用pandas导入csv文件内容的示例代码
Dec 24 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
微盾PHP脚本加密专家php解密算法
2020/09/13 PHP
ioncube_loader_win_5.2.dll的错误解决方法
2015/01/04 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
总结PHP删除字符串最后一个字符的三种方法
2016/08/30 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
2017/07/27 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
Jquery下的26个实用小技巧(jQuery tips, tricks &amp; solutions)
2010/03/01 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
使用js的replace()方法查找字符示例代码
2013/10/28 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
jquery实现右侧栏菜单选择操作
2016/03/04 Javascript
基于AngularJS实现iOS8自带的计算器
2016/09/12 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
详解vue.js全局组件和局部组件
2017/04/10 Javascript
vue.js删除动态绑定的radio的指定项
2017/06/02 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
微信小程序实现富文本图片宽度自适应的方法
2019/01/20 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
[01:01:52]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第二场 1月9日
2021/03/11 DOTA
对python的文件内注释 help注释方法
2018/05/23 Python
在python 中实现运行多条shell命令
2019/01/07 Python
HTML5自定义属性前缀data-及dataset的使用方法(html5 新特性)
2017/08/24 HTML / CSS
html5移动端价格输入键盘的实现
2019/09/16 HTML / CSS
牵手50新加坡:专为黄金岁月的单身人士而设的交友网站
2020/08/16 全球购物
业绩考核岗位职责
2014/02/01 职场文书
学生安全承诺书
2014/05/22 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android