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 15 Python
python中的__slots__使用示例
Feb 26 Python
pygame学习笔记(1):矩形、圆型画图实例
Apr 15 Python
使用Python编写提取日志中的中文的脚本的方法
Apr 30 Python
python验证码识别的示例代码
Sep 21 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
Feb 26 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
python xlwt如何设置单元格的自定义背景颜色
Sep 03 Python
python 循环数据赋值实例
Dec 02 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
实战Python爬虫爬取酷我音乐
Apr 11 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
全国FM电台频率大全 - 21 海南省
2020/03/11 无线电
PHP UTF8编码内的繁简转换类
2009/07/20 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
php入门教程之Zend Studio设置与开发实例
2016/09/09 PHP
微信 开发生成带参数的二维码的实例
2016/11/23 PHP
JavaScript设计模式之抽象工厂模式介绍
2014/12/28 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
jQuery实现指定区域外单击关闭指定层的方法【经典】
2016/06/22 Javascript
AngularJS常见过滤器用法实例总结
2017/07/06 Javascript
详解小程序输入框闪烁及重影BUG解决方案
2018/08/31 Javascript
Node.js+ELK日志规范的实现
2019/05/23 Javascript
Nuxt.js实现一个SSR的前端博客的示例代码
2019/09/06 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
python中assert用法实例分析
2015/04/30 Python
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
python连接数据库的方法
2017/10/19 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
python实现年会抽奖程序
2019/01/22 Python
Python如何实现动态数组
2019/11/02 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
建筑工程专业学生的自我评价
2013/12/25 职场文书
抗震救灾标语
2014/06/26 职场文书
维护民族团结演讲稿
2014/08/27 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
出国签证在职证明范本
2014/11/24 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
使用Bandicam录制鼠标指针并附带点击声音,还可以添加点击动画效果
2022/04/11 数码科技
mysql字段为NULL索引是否会失效实例详解
2022/05/30 MySQL