文档章节

Python之__str__与__repr__

f
 fdc2017
发布于 2017/05/03 17:28
字数 394
阅读 2
收藏 0

我们在设计一个类时,如果只实现__str__会如何?

>>> class Person:
	def __init__(self,name,age):
		self.name=name
		self.age=age
	def __str__(self):
		return '姓名:%s  年龄:%d' %(self.name,self.age)

	
>>> people=[Person('范冰冰',37),Person('柳岩',36),Person('王菲',47)]
>>> people
[<__main__.Person object at 0x0000021BB6451B38>, <__main__.Person object at 0x0000021BB6451B00>, <__main__.Person object at 0x0000021BB63AAC18>]

这显然不是我们需要的

>>> [print(p) for p in people]
姓名:范冰冰  年龄:37
姓名:柳岩  年龄:36
姓名:王菲  年龄:47
[None, None, None]
>>> for p in people:
	print(p)

	
姓名:范冰冰  年龄:37
姓名:柳岩  年龄:36
姓名:王菲  年龄:47

只能这样用,如果增加实现__repr__会如何?

>>> class Person:
	def __init__(self,name,age):
		self.name=name
		self.age=age
	def __str__(self):
		return '姓名:%s  年龄:%d' %(self.name,self.age)
	def __repr__(self):
		return self.__str__()
>>> people=[Person('范冰冰',37),Person('柳岩',36),Person('王菲',47)]
>>> people
[姓名:范冰冰  年龄:37, 姓名:柳岩  年龄:36, 姓名:王菲  年龄:47]
>>> [p for p in people]
[姓名:范冰冰  年龄:37, 姓名:柳岩  年龄:36, 姓名:王菲  年龄:47]

 达到我们的预期,那如果只实现__repr__,不实现__str__又会如何 ?

>>> class Person:
	def __init__(self,name,age):
		self.name=name
		self.age=age		
	def __repr__(self):
		return '姓名:%s  年龄:%d' %(self.name,self.age)

	
>>> p1=Person('范冰冰',37)
>>> p1
姓名:范冰冰  年龄:37
>>> people=[Person('范冰冰',37),Person('柳岩',36),Person('王菲',47)]
>>> people
[姓名:范冰冰  年龄:37, 姓名:柳岩  年龄:36, 姓名:王菲  年龄:47]
>>> for p in people:
	print(p)

	
姓名:范冰冰  年龄:37
姓名:柳岩  年龄:36
姓名:王菲  年龄:47

如此看来,在类中一般情况下,只实现__repr__

© 著作权归作者所有

共有 人打赏支持
f
粉丝 0
博文 9
码字总数 1724
作品 0
武汉
私信 提问
Python基础(面向对象编程)

欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职一站式搞定! 对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴...

天善智能
2018/11/30
0
0
python repr() str() ` `函数

repr() 输出对 Python比较友好,而str()的输出对用户比较友好。虽然如此,很多情况下这三者的输出仍然都是完全一样的. 内建函数str()和repr()或反引号操作符()可以方便地以字符串的方式获取...

疯子张
2014/05/20
0
0
Python 中 str 和 repr 的区别

Alex总结得很好,但是也太简洁了。 首先让我来重复下Alex的总结的要点: 缺省实现是没用的(很难说不是,但是没错) __repr__的目标是准确性 __str__的目标是可读性 容器的__str__使用包含了...

燕莳泗
2013/04/10
17.2K
6
Python学习笔记(2)-python对象

1.所有的Python 对像都拥有三个特性:身份,类型和值。 身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。 这个值可以被认为是该对象的内存地址。您...

山海经
2013/10/06
0
0
Python 字符串与unicode对象 关于与区别 encode、decode

作者:shede333 主页:http://my.oschina.net/shede333 && http://blog.sina.com.cn/u/1509658847 版权声明:原创文章,版权声明:自由转载-非商用-非衍生-保持署名 [Creative Commons BY-N...

shede333
2014/04/07
0
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 看见这花臂了么?赶紧叫大佬!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享周华健的单曲《有没有一首歌会让你想起我》 《有没有一首歌会让你想起我》- 周华健 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
78
4
Confluence 6 升级中的一些常见问题

升级的时候遇到了问题了吗? 如果你想尝试重新进行升级的话,你需要首先重新恢复老的备份。不要尝试再次对 Confluence 进行升级或者在升级失败后重新启动老的 Confluence。 在升级过程中的一...

honeymoose
今天
2
0
C++随笔(四)Nuget打包

首先把自己编译好的包全部准备到一个文件夹 像这样 接下来新建一个文本文档,后缀名叫.nuspec 填写内容 <?xml version="1.0"?><package xmlns="http://schemas.microsoft.com/packaging/201......

Pulsar-V
今天
3
0
再谈使用开源软件搭建数据分析平台

三年前,我写了这篇博客使用开源软件快速搭建数据分析平台, 当时收到了许多的反馈,有50个点赞和300+的收藏。到现在我还能收到一些关于dataplay2的问题。在过去的三年,开源社区和新技术的发...

naughty
今天
18
0
Python3的日期和时间

python 中处理日期时间数据通常使用datetime和time库 因为这两个库中的一些功能有些重复,所以,首先我们来比较一下这两个库的区别,这可以帮助我们在适当的情况下时候合适的库。 在Python文...

编程老陆
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部