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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
跟老齐学Python之重回函数
Oct 10 Python
python通过post提交数据的方法
May 06 Python
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
使用Python绘制图表大全总结
Feb 11 Python
理解Python中的绝对路径和相对路径
Aug 30 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
深入理解python中sort()与sorted()的区别
Aug 29 Python
浅析python的Lambda表达式
Feb 27 Python
Python自动抢红包教程详解
Jun 11 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
Python 数据的累加与统计的示例代码
Aug 03 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下pdo的mysql事务处理用法实例
2014/12/27 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
PHP上传图片时判断上传文件是否为可用图片的方法
2016/10/20 PHP
php精度计算的问题解析
2019/06/21 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
PHP类的自动加载与命名空间用法实例分析
2020/06/05 PHP
js实现延迟加载的方法
2015/06/24 Javascript
BootStrap制作导航条实例代码
2016/05/06 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
如何用vue-cli3脚手架搭建一个基于ts的基础脚手架的方法
2019/12/12 Javascript
Nuxt配置Element-UI按需引入的操作方法
2020/07/06 Javascript
JS实现页面鼠标点击出现图片特效
2020/08/19 Javascript
Python获取文件ssdeep值的方法
2014/10/05 Python
Python函数式编程指南(四):生成器详解
2015/06/24 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Python的垃圾回收机制详解
2019/08/28 Python
python对Excel的读取的示例代码
2020/02/14 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
学生干部的自我评价分享
2014/01/18 职场文书
工程技术员岗位职责
2014/03/02 职场文书
婚庆司仪主持词
2014/03/15 职场文书
《黄山奇石》教学反思
2014/04/19 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
重阳节简报
2015/07/20 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
2016廉洁从政心得体会
2016/01/19 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书