问题


改变对象实例的打印或显示输出,让它们更具可读性。

解决方案


要改变一个实例的字符串表示,可重新定义它的 __str__()__repr__() 方法。例如:

class Pair:def __init__(self, x, y):self.x = xself.y = ydef __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)

作为这种实现的一个替代,你也可以使用 % 操作符(Python2写法),就像下面这样:

def __repr__(self):return 'Pair(%r, %r)' % (self.x, self.y)

转载于:https://www.cnblogs.com/nju2014/p/5454621.html

【Python】改变对象的字符串显示相关推荐

  1. Python实战从入门到精通第十八讲——改变对象的字符串显示

    想改变对象实例的打印或显示输出,让它们更具可读性. 要改变一个实例的字符串表示,可重新定义它的 __str__() 和 __repr__() 方法.例如: lass Pair:def __init__ ...

  2. Python对象类型——字符串、列表、元组

    字符串 Python连接多个字符串可用"+"号,但这个操作不如把所有子字符串放到一个列表或可迭代对象中,然后调用一个join方法来把所有内容连接在一起节约内存. 原始字符串操作符( ...

  3. python获取系统时间为字符串_Python日期时间对象转换为字符串的实例

    1.标准转换格式符号说明 %a 本地星期的短名称 如:Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE) %A 本地星期全名称 如 :Sunday, ...

  4. js字符串怎么转python对象_js 对象转换为字符串

    强制转换 强制转换主要指使用Number.String和Boolean三个构造函数,手动将各种类型的值,转换成数字.字符串或者布尔值. Number() 使用Number函数,可以将任意类型的值转化成 ...

  5. python类定义中、对象字符串的特殊方法是_python中自定义类对象json字符串化的方法_python json转字符串、...

    python中自定义类对象json字符串化的方法 1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): prin ...

  6. Python判断不可变对象(字符串,整数,浮点数,数组)相等的办法以及其底层实现原理

    Python判断不可变对象(字符串,整数,浮点数,数组)相等的办法以及其底层实现原理 Python中,判断不可变对象是否相等与Java十分不同. 结论 Python中判断两个字符串相等:既可以使用&q ...

  7. python给定字符串显示奇数_字符串基础练习题80+道(原文及代码见文尾链接)

    Python 字符串基础练习题80+道 1.编写一个Python程序来计算字符串的长度. 2.编写一个Python程序来计算字符串中的字符数(字符频率). Sample String:google.c ...

  8. python minidom生成的xml对象转字符串方法

    之前找了好多博客,要不是互抄就是说用etree实现xml对象并使用etree自带的字符串转换方法将xml对象转为字符串输出.但是我就钟爱用minidom定义xml对象,所以干脆就自己琢磨,才发现min ...

  9. python进制转换字符串转二进制对象整数转二进制对象16进制字符串转二进制对象(及其逆转换)

    (1)数字进制转换 int() 函数用于将一个字符串或数字转换为整型. x – 字符串或数字. base – 进制数,默认十进制. 如果是带参数base的话,要以字符串的形式进行输入 >> ...

  10. python面相对象编程指南_Python面向对象编程指南

    抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...

最新文章

  1. SAP有用的NOTE(持续更新)
  2. AI+视频分析:实时监测无处不在的安全风险
  3. 设计模式 工厂方法_工厂设计模式–一种有效的方法
  4. maven仓库理解、下载及设置
  5. matlab对文本文件的读写
  6. skywalking环境搭建及使用
  7. 庖丁解Puppet之操作记实
  8. Code a simple telnet client using sockets in python
  9. JAVA RMI远程方法调用简单实例
  10. 生命科学计算机科学结合,生命科学与计算机科学的结合发展研究.docx
  11. 在图3-30 中,某学院的以太网交换机有三个接口分别和学院三个系的以太网相连,另外三个接口分别和电子邮件服务器、万维网服务器以及一个连接互联网的路由器相连。图中的A,B和C都是100Mbit/s以太网
  12. hadoop重命名文件_hadoop HDFS常用文件操作命令
  13. froyo 新的多媒体框架 stagefright与opencore对比
  14. xp系统禁止开机启动服务器,win xp开机启动项怎么设置-win xp关闭开机启动项的方法 - 河东软件园...
  15. 解决aspose word 中文乱码问题
  16. 软件失效模式与影响分析SFMEA的8个入手点
  17. 说说 Java 的静态内部类
  18. 7779 - KKT基本算法304保龄球340
  19. 倍思机械眼六合一智能HUB扩展坞潮流笔记本亲密伴侣
  20. Iphone5 语言设置成英文后如何发中文短信

热门文章

  1. 从零基础入门Tensorflow2.0 ----四、16.tfrecord基础API使用
  2. 网易编程题目——相反数:
  3. Android GC机制介绍
  4. 树莓派4烧录系统后黑屏_原创试用 | 树莓派3B+测评(二)ubuntu系统烧录+彩虹屏问题解决...
  5. 战地一的服务器在哪个文件夹,战地1怎么加入服务器 战地1加入服务器方法
  6. 使用MediaCodec和RTMP做直播推流
  7. 一种支持多种流媒体协议的播放内核
  8. 今日力推: Android 厨客APP / Android 趣刻App
  9. php 松散耦合,PHP依赖注入和松散耦合
  10. pyqt5 登录窗口调用主窗口