Python中__repr__和__str__区别详解
作者:我爱学python 发布时间:2022-02-17 04:45:25
标签:Python,repr,str
看下面的例子就明白了
class Test(object):
def __init__(self, value='hello, world!'):
self.data = value
>>> t = Test()
>>> t
<__main__.Test at 0x7fa91c307190>
>>> print t
<__main__.Test object at 0x7fa91c307190>
看到了么?上面打印类对象并不是很友好,显示的是对象的内存地址
下面我们重构下该类的__ repr__以及str,看看它们俩有啥区别
# 重构__repr__
class TestRepr(Test):
def __repr__(self):
return 'TestRepr(%s)' % self.data
>>> tr = TestRepr()
>>> tr 直接终端显示,不print就是面向程序员
TestRepr(hello, world!)
>>> print tr print是面向程序员
TestRepr(hello, world!)
重构__ repr__方法后,不管直接输出对象还是通过print打印的信息都按我们repr方法中定义的格式进行显示了
# 重构__str__
calss TestStr(Test):
def __str__(self):
return '[Value: %s]' % self.data
>>> ts = TestStr()
>>> ts
<__main__.TestStr at 0x7fa91c314e50>
>>> print ts
[Value: hello, world!]
你会发现,直接输出对象ts时并没有按我们str方法中定义的格式进行输出,而用print输出的信息却改变了
repr和str这两个方法都是用于显示的,str是面向用户的,而repr面向程序员。
打印操作会首先尝试str和str内置函数(print运行的内部等价形式),它通常应该返回一个友好的显示。
__ repr__用于所有其他的环境中:用于交互模式下提示回应以及repr函数,如果没有使用str,会使用print和str。它通常应该返回一个编码字符串,可以用来重新创建对象,或者给开发者详细的显示。
当我们想所有环境下都统一显示的话,可以重构repr方法;当我们想在不同环境下支持不同的显示,例如终端用户显示使用str,而程序员在开发期间则使用底层的repr来显示,实际上str只是覆盖了repr以得到更友好的用户显示。
来源:https://www.jianshu.com/p/72a47d79af9f
0
投稿
猜你喜欢
- 导语好消息!下一个假期已经在路上了,正在向我们招手呢!大家只要再坚持5天就能迎来中秋小长假啦~“海上生明月,天涯共此时”又是一年中秋至!快跟
- 前言Django自带一个用户认证系统,用于处理用户账户、群组、许可和基于cookie的用户会话。Django的认证系统包含了身份验证和权限管
- 今儿继续做项目,学习了Django的forms生成前端的代码。forms.pyclass SignupForm(forms.Form): &
- Dreamweaver中一直变色的超级链接,css+javascript实现超级链接变色,当鼠标移动到链接上时,链接的颜色不停闪烁变色。&l
- 一、使用的工具haystack是django的开源搜索框架,该框架支持Solr,Elasticsearch,Whoosh,*Xapian*搜
- 基本思路斑马线检测通过opencv图像处理来进行灰度值转换、高斯滤波去噪、阈值处理、腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置
- 放到公用调用文件(如conn数据库链接文件),对所有GET或POST的数据进行过滤特殊字符串,以实现简单有效的SQL注入过滤Function
- 本文实例讲述了Python处理XML格式数据的方法。分享给大家供大家参考,具体如下:这里的操作是基于Python3平台。在使用Python处
- 前言全局共享内存则主要是 MySQL Instance(mysqld进程)以及底层存储引擎用来暂存各种全局运算及可共享的暂存信息,如存储查询
- 本文实例讲述了JavaScript实现点击按钮切换网页背景色的方法。分享给大家供大家参考,具体如下:这里演示JavaScript用按钮随意变
- MySQL 群集是一种技术,该技术允许在无共享的系统中部署“内存中”和“磁盘中”数据库的 Cluster 。通过无共享体系结构,系统能够使用
- 当逐渐在用python开发项目或者日常使用时,一般需要大量使用别人提供的包,这些包能高效的帮助我们快速高效的完成指定任务或者需求,不过有时也
- NLTK 是使用 Python 教学以及实践计算语言学的极好工具。此外,计算语言学与人工 智能、语言/专门语言识别、翻译以及语法检查等领域关
- 前言事件背景是经常有很多琐碎的事情需要在某个时间点去做,光靠人力去记,容易出现偏差,尤其是对容易迷糊的选手。所以动手写了一套代码,可以按需要
- 1.os 库基本介绍os库提供通用的、基本的操作系统交互功能。三大操作系统:windowsMac OSLinuxos 库是python标准库
- 本文实例讲述了python切片的步进、添加、连接简单操作。分享给大家供大家参考,具体如下:步进切片:#coding:utf-8a="
- MySQL-8.0.22-winx64的数据库安装教程,供大家参考,具体内容如下1.安装步骤直接将安装包解压在安装目录之下。2.添加系统变量
- 英文文档:class type(object)class type(name, bases, dict)With one argument,
- Python获取电脑截图有多种方式,具体如下:PIL中的ImageGrab模块windows APIPyQtpyautoguiPIL中的Im
- 今天开始学习Python时发现Pycharm竟然过期了需要重新注册,穷苦学生没钱只能再找找百度了浪费了半天时间终于找到一个可以使用的了,支持