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装饰器使用方法实例
Nov 21 Python
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
编写Python的web框架中的Model的教程
Apr 29 Python
深入解析Python编程中super关键字的用法
Jun 24 Python
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 Python
Python3 Random模块代码详解
Dec 04 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
python+numpy+matplotalib实现梯度下降法
Aug 31 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
Dec 05 Python
Python地图绘制实操详解
Mar 04 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
python读取hdfs上的parquet文件方式
Jun 06 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实现在多维数组中查找特定value的方法
2015/07/29 PHP
线路分流自动跳转代码;希望对大家有用!
2006/12/02 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
JavaScript对象、属性、事件手册集合方便查询
2010/07/04 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
jquery自定义滚动条插件示例分享
2014/02/21 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
javascript遍历json对象的key和任意js对象属性实例
2017/03/09 Javascript
vue 打包后的文件部署到express服务器上的方法
2017/08/09 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
nodejs require js文件入口,在package.json中指定默认入口main方法
2018/10/10 NodeJs
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
Python通过文本和图片生成词云图
2020/05/21 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
2020/07/27 Python
HTML5头部标签的一些常用信息小结
2016/10/23 HTML / CSS
介绍一下JMS编程步骤
2015/09/22 面试题
计算机专业自荐信
2013/10/14 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
歌唱比赛获奖感言
2014/01/21 职场文书
《口技》教学反思
2014/02/21 职场文书
个人委托书格式
2014/04/04 职场文书
2015年幼儿园学期工作总结
2015/05/22 职场文书
小学班级口号大全
2015/12/25 职场文书
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python
mysql序号rownum行号实现方式
2022/12/24 MySQL