在讲解之前,我们先来了解下str和repr的区别:两者都是用来将数字,列表等类型的数据转化为字符串的形式。不同之处在于str更加类似于C语言中使用printf输出的内容,而repr输出的内容会直接将变量的类型连带着表现出来。

例如:

>>> print (str('Python'))
Python
>>> print (repr('Python'))
'Python'

下面我通过一个例子进一步阐述__str__与__repr__两个魔法函数的区别。

>>> class Test():
def __inint__(self):
self.data = 'Hello,World!'
>>> test = Test()
>>> test
<__main__.Test object at 0x0000000003345A90>
>>> print (test)
<__main__.Test object at 0x0000000003345A90>

不难看出:无论是直接输出对象,还是通过print对象,都是显示对象的内存地址。
这样的数据对于用户和开发人员来说,都不是很友好。
对此,Python专门为我们引入__str__和__repr__两个函数。

1.重构__str__方法

>>> class Test():
def __str__(self):
return "Hello,World!"
>>> test = Test()
>>> test
<__main__.Test object at 0x00000000031EAB00>
>>> print (test)
Hello,World!

重构后,直接输出对象还是显示内存地址,而通过print能打印出格式化字符串。

2.重构__repr__方法

>>> class Test():
def __repr__(self):
return 'Hello,World!'
>>> test = Test()
>>> test
Hello,World!
>>> print (test)
Hello,World!

重构后,无论是直接输出对象,还是通过print对象,都能输出格式化字符串
由此可以分析出__str__()和__repr__()的区别:前者是用于显示给用户,而后者用于显示给开发人员(程序员)。

最新文章

  1. C++重载流运算符,将存储结构体的vector直接写入文件
  2. org.springframework.expression.spel.SpelEvaluationException: EL1005E:(pos 0): Type cannot be found
  3. gauss消元
  4. 通过正则获取URL中的参数
  5. ANT-build.xml编译文件详解
  6. 灵活控制 Hibernate 的日志或 SQL 输出(包含参数),以便于诊断
  7. 导出Unity场景为配置文件
  8. 去掉Windows桌面软件的快捷图标的箭头
  9. order by按照指定记录排序
  10. (NO.00004)iOS实现打砖块游戏(八):游戏中小球与砖块的碰撞
  11. CSS--块级元素和行内元素
  12. vue -about
  13. linux下mysql多实例安装
  14. jdbc链接数据库的url两种写法
  15. 001.HAProxy简介
  16. [LeetCode] 74. Search a 2D Matrix_Medium tag: Binary Search
  17. 《剑指offer》第五十四题(二叉搜索树的第k个结点)
  18. mui页面交互
  19. Tomcat集群下获取memcached缓存对象数量,统计在线用户数据量
  20. hibernate连接oracle12c数据库报:java.sql.SQLException: ORA-01017: 用户名/口令无效; 登录被拒绝。(用户名/口令在oracle客户端以及cmd命令都能登入)

热门文章

  1. c#**************
  2. Codeforces 343D WaterTree - 线段树, DFS序
  3. linux 安装jdk以及nginx详细过程
  4. js的处理技巧
  5. python自定义函数可以向前引用不用声明
  6. 菜鸟容易中的招__setattr__
  7. 玩一玩基于Token的 自定义身份认证+权限管理
  8. [LeetCode] Sliding Window Median 滑动窗口中位数
  9. HTTP你真的懂了吗?
  10. python内置方法