一文让你彻底搞懂Python中__str__和__repr__
作者:宇宙之一粟 发布时间:2021-10-30 20:09:56
__str__和__repr__的异同?
字符串的表示形式
我们都知道,Python的内置函数repr()能够把对象用字符串的形式表达出来,方便我们辨认。这就是“字符串表示形式”。repr()就是通过__repr__这个特殊方法来得到一个对象的字符串表示形式的。如果没有实现__repr__,当我们在控制台里打印一个向量的实例时,得到的字符串可能会是 <Vector object at 0x10a514f98>。
>>> class Example: pass
>>> print(str(Example()))
<__main__.Example object at 0x10a514f98>
>>> print(repr(Example()))
<__main__.Example object at 0x1088eb438>
>>>
>>> str(Example)
"<class '__main__.Example'>"
>>> repr(Example())
'<__main__.Example object at 0x1088eb438>'
__str__vs.__repr__
接下来我们看一看**__str__
和__repr__
**有哪些异同。根据Python官方文档定义:
__str__:通过str(object)以及内置函数format()和print()调用以生成一个对象的“非正式”或格式良好的字符串表示。返回值必须是字符串对象。
__repr__:是由repr()内置函数调用,用来输出一个对象的“官方”字符串表示。返回值必须是字符串对象,此方法通常被用于调试。内置类型 object 所定义的默认实现会调用 object.__repr__()。
什么正式与非正式格式,你已经搞懵了是吗?没事,我们接着看:
1. 两者都能输出对象
>>> x = 4
>>> repr(x)
'4'
>>> str(x)
'4'
>>> y = 'pythonic'
>>> repr(y)
"'pythonic'"
>>> str(y)
'pythonic'
>>> z = '4'
>>> repr(z)
"'4'"
>>> str(z)# 注意,此处的输出结果形式跟str(x)一样,但x和z的类型并不一样
'4'
>>> str(x) == str(z)
True
>>> repr(x) == repr(z)
False
>>> str(4) == str("4")
True
>>> repr(4) == repr("4")
False
当x=4,当x为整数类型时,调用str()和repr()的返回结果是一样,
而当y为字符串类型时,repr(y)的结果就是“正式”的字符串表示,而str(y)的结果则是“非正式”的。str()能够让我们最快速了解到对象的内容,可读性较高。
2 .__str__是可读的,__repr__的目标是明确的
>>> import datetime
>>> d = datetime.datetime.now()
>>> str(d)
'2020-04-04 20:47:46.525245'
>>> repr(d)
'datetime.datetime(2020, 4, 4, 20, 47, 46, 525245)'
>>>
可以看出repr()
更能显示出对象的类型、值等信息,对象描述清晰的。
在 str()
函数被使用,或是在用 print
函数打印一个对象的时候才被调用的,并且它返回的字符串对终端用户更友好。
3. 重写__repr__,那也会使用__str_
class Student():
def __init__(self, name):
self.name = name
def __str__(self):
return "Name:" + self.name
def __repr__(self):
return "姓名:" + self.name
class_one = Student("Alice")
print(class_one)
print(str(class_one))
print(repr(class_one))
输出结果:
Name:Alice
Name:Alice
姓名:Alice
__str__ 的目标是可读的,__str__()并不预期返回一个有效的 Python 表达式,但可以使用更方便或更准确的描述信息。
__repr__ 的目标是明确的,所返回的字符串应该准确、无歧义,并且尽可能表达出如何 用代码创建出这个被打印的对象。
容器的 __str__ 方法的使用包含对象的 __repr__
来源:https://blog.csdn.net/yuzhou_1shu/article/details/105319065
猜你喜欢
- 在学习asp过程中相信很多初学者对Sub与Function的用法有些疑惑,好像它们没什么区别都可以使用。呵呵,看了本文的介绍您就可以了解了S
- alt的准确含义是,当照片不存在或者load错误时的提示。但同时img也同时支持alt和title,再有某些浏览器的错误解析,因此经常被误导
- 解决安装Office2003 SP2后不能打开Access的问题手动更改注册表要解决此问题, 手动更改计算机上注册表位置启动 Access
- 使用suds这个第三方模块from suds.client import Clienturl = 'http://ip:port/?
- 简介CountVectorizer官方文档。将一个文档集合向量化为为一个计数矩阵。如果不提供一个先验字典,不使用分析器做某种特征选择,那么特
- xlsxwriter 简介用于以 Excel 2007+ XLSX 文件格式编写文件,相较之下 PhpSpreadsheet 支持更多的格式
- 如下所示: static void Main()&nbs
- 在实现TextStraem的时候,找到判断文件编码的代码是VBS的,但是在JScript中是没有ASC等函数的,也不能对二进制数据进行处理,
- python可以方便地支持多线程。可以快速创建线程、互斥锁、信号量等等元素,支持线程读写同步互斥。美中不足的是,python的运行在pyth
- 问题如下python pip安装模块提示错误failed to create process原因:报这个错误的原因,是因为python的目录
- 本文实例讲述了django框架模型层功能、组成与用法。分享给大家供大家参考,具体如下:Django models是Django框架自定义的一
- 我就废话不多说了,直接上代码吧!# -*- coding: utf-8 -*-"""Created on Sa
- python 获取蓝牙设备类型扫描蓝牙设备获取到的信息中,无法判断扫描到的蓝牙设备属于什么类型的设备。扫描蓝牙信息使用的是python 里面
- 本文实例讲述了PHP基于phpqrcode生成带LOGO图像的二维码。分享给大家供大家参考。具体如下:这里PHP使用phpqrcode生成带
- 计划任务工具-windows计划任务工具根据自己设定的具体时间,频率,命令等属性来规定所要执行的计划。效果图代码# -*- coding:
- mint19.2 本来pip 和 pip2 对应 python2.7 pip3对应pytho
- 本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键—盒子模型(Box model). 理解Box model的关键便是margin
- <% &nbs
- 如下所示:def translationCipher(msg,key): result = ["&quo
- 一、读者指引读者指引帮助你掌握本文的梗概。以免你看了大半才明白这编文章不适合你,给你造成视觉污染。如果你正在用ASP+XML写一些程序,或者