python笔记70 - Python中__repr__和__str__区别
前言
Python中__repr__
和__str__
使用区别
__repr__
使用
很多时候我们在创建一个类的时候,在终端打印类的实例,看到的是一个类似于这样的内容:<XXX object at 0x0000000001222E10>
class MyDefined(object):
def __init__(self):
self.name = "yoyo"
在终端调试结果
>python
Python 3.6.6
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<a.MyDefined object at 0x0000015EEEB1F0B8>
>>>
返回的是对象的内存地址,对于初学者看起来很不友善,初学者无法理解返回的内容,于是可以加一个__repr__
方法
class MyDefined(object):
def __init__(self):
self.name = "yoyo"
def __repr__(self):
return '<object MyDefined: {}>'.format(self.name)
重新在终端调试
>python
Python 3.6.6
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<object MyDefined: yoyo>
>>> print(yo)
<object MyDefined: yoyo>
从打印的结果就可以看到返回的是<object MyDefined: yoyo>
,这样用户就知道返回的是什么实例对象,便于开发者理解。
__repr__
是直接输出对象(面向开发者),方便提供接口给开发者使用,如django里面的ORM查询,返回queryset对象。
__str__
使用
__str__
方法是在print()打印的时候输出给用户看的,面向的是普通的用户,方便用户知道返回的是什么实例对象。
class MyDefined(object):
def __init__(self):
self.name = "yoyo"
def __str__(self):
return '<object MyDefined: {}>'.format(self.name)
在终端调试
>python
Python 3.6.6
>>> from a import MyDefined
>>> yo=MyDefined()
>>> yo
<a.MyDefined object at 0x000001A4C133F128>
>>> print(yo)
<object MyDefined: yoyo>
>>>
从结果可以看到直接输入yo,返回的还是object at 0x000
,只有print()输出的时候才会打印__str__
返回的内容
总结
注意:__str__()
方法和__repr__()
方法的返回值只能是字符串!
__repr__
和__str__
这两个方法都是用于显示的,__str__
是面向用户的,而__repr__
面向开发者
关于调用两种方法的时机
- 使用print()时
- 使用%s和f’{}’拼接对象时
- 使用str(x)转换对象x时
在上述三种场景中,会优先调用对象的
__str__()
方法;若没有,就调用__repr__()
方法;若再没有,则显示其内存地址。
特别地,对于下面两种场景:
- 用%r进行字符串拼接时
- 用repr(x)转换对象x时
则会调用这个对象的
__repr__()
方法;若没有,则不再看其是否有__str__()
方法,而是显示其内存地址。
当我们想在不同环境下支持不同的显示,例如终端用户显示使用__str__
,而程序员在开发期间则使用底层的__repr__
来显示,实际上__str__
只是覆盖了__repr__
以得到更友好的用户显示。
参考博客https://www.cnblogs.com/zyyhxbs/p/11184094.html 参考博客https://blog.csdn.net/nanhuaibeian/article/details/86694581
相关文章
- MySQLump 参数--Lock-Tables浅析
- 谷歌将为 Android 12 推出全新游戏模式 API,有望支持三档性能调节
- 如何在Python中操作数据库
- Python操作Redis大全
- delete、truncate、drop的区别有哪些,该如何选择
- 聊聊 Python 数据处理全家桶(MongoDB 篇)
- 聊聊 Python 数据处理全家桶(Redis篇)
- MySQL limit导致的执行计划差异
- mysqldump一致性热备原理剖析
- 利用SQL和Python分别实现人流量查询,考验逻辑思维的时候到了
- 使用 Python 配合 Redis 超越缓存
- 面试官:你来讲讲一条查询语句的具体执行过程
- 我用Python处理3万多条数据,只要几秒钟……
- 代码详解:使用Python从不同表格中提取数据
- 自定义构建交互式SSH应用程序,以Python为例
- 深入理解select count(*)底层究竟做了什么
- 使用Redis和Python构建一个共享单车的应用程序
- Python实现数据可视化,看如何监控你的爬虫?
- 什么是大数据?如何成为大数据的技术大牛?
- 零基础Python数据库怎么学?大牛带你扬帆起航