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爬虫之使用Scrapy框架编写爬虫
Nov 07 Python
简单说明Python中的装饰器的用法
Apr 24 Python
numpy中实现二维数组按照某列、某行排序的方法
Apr 04 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
Python3最长回文子串算法示例
Mar 04 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
python中的列表与元组的使用
Aug 08 Python
Python 使用 PyMysql、DBUtils 创建连接池提升性能
Aug 14 Python
python中的逆序遍历实例
Dec 25 Python
python多线程和多进程关系详解
Dec 14 Python
pycharm 快速解决python代码冲突的问题
Jan 15 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中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
Zend的AutoLoad机制介绍
2012/09/27 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
jquery单行文字向上滚动效果的实现代码
2014/09/05 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
JSONP跨域请求
2017/03/02 Javascript
js将当前时间格式化为 年-月-日 时:分:秒的实现代码
2018/01/20 Javascript
JavaScript设计模式之模板方法模式原理与用法示例
2018/08/07 Javascript
PostgreSQL Node.js实现函数计算方法示例
2019/02/12 Javascript
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
Python利用multiprocessing实现最简单的分布式作业调度系统实例
2017/11/14 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python中的异常处理try/except/finally/raise用法分析
2019/02/28 Python
python使用re模块爬取豆瓣Top250电影
2020/10/20 Python
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
Python面试题集
2012/03/08 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
战友聚会邀请函
2014/01/18 职场文书
员工培训邀请函
2014/02/02 职场文书
大型会议接待方案
2014/03/01 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
成事在人观后感
2015/06/16 职场文书
机关干部作风整顿心得体会
2016/01/22 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL