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 相关文章推荐
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
python 遍历字符串(含汉字)实例详解
Apr 04 Python
详解django中使用定时任务的方法
Sep 27 Python
在python中利用GDAL对tif文件进行读写的方法
Nov 29 Python
python 利用pandas将arff文件转csv文件的方法
Feb 12 Python
python plotly画柱状图代码实例
Dec 13 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
pytorch masked_fill报错的解决
Feb 18 Python
Python word文本自动化操作实现方法解析
Nov 05 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
PyCharm 光标变成黑块的解决方式
Feb 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利用cookie实现自动登录的方法
2014/12/10 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
JS+XML 省份和城市之间的联动实现代码
2009/10/14 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
jQuery实现鼠标滑过链接控制图片的滑动展开与隐藏效果
2015/10/28 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
仅一个form表单 js实现注册信息依次填写提交功能
2016/06/12 Javascript
jQuery插件uploadify实现ajax效果的图片上传
2016/06/18 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
80%应聘者都不及格的JS面试题
2017/03/21 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
细说Vue组件的服务器端渲染的过程
2019/05/30 Javascript
Vue.js组件通信之自定义事件详解
2019/10/19 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
python实现雨滴下落到地面效果
2018/06/21 Python
python 切换root 执行命令的方法
2019/01/19 Python
python如何将多个PDF进行合并
2019/08/13 Python
美国知名的女性服饰品牌:LOFT(洛芙特)
2016/08/05 全球购物
全球酒店预订网站:Hotels.com
2016/08/10 全球购物
超市营业员求职简历的自我评价
2013/10/17 职场文书
《骑牛比赛》教后反思
2014/04/22 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
优秀纪检干部材料
2014/08/27 职场文书
java executor包参数处理功能 
2022/02/15 Java/Android
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js