当前位置: 首页 > news >正文

Python中`__str__`和`__repr__`的区别(最清晰解释)

Python中__str____repr__的区别(最最最清晰的解释)

在Python的面向对象编程体系中,__str____repr__这两个特殊方法具有独特且重要的作用,尽管它们都涉及对象的字符串表示形式的定义,但在功能和使用场景上存在显著差异。

一、功能概述

__str__

__str__是一个特殊的方法,其核心功能是为对象提供一种“非正式”且“用户友好”的字符串表达方式。它主要用于生成一个易于理解和阅读的字符串,旨在向用户清晰地展示对象所包含的关键信息。当使用print()函数来输出一个对象时,Python会自动调用该对象的__str__方法(前提是该方法已定义),以获取合适的字符串用于显示。这种机制使得用户能够以直观的方式了解对象的基本情况,无需深入了解对象的内部结构和实现细节。

__repr__

__repr__同样是一种特殊方法,其作用是为对象提供一种“正式”且“开发者友好”的字符串表示形式。它的主要目的是生成一个能够精确地重新创建该对象的字符串表示。在开发和调试过程中,开发者经常需要准确了解对象的状态和特征,以便进行故障排查、代码调试以及对象的复制和重建等操作。__repr__方法返回的字符串应具备明确性和无歧义性,最好能够通过eval()函数直接重新创建出与原始对象完全相同的对象。

二、返回值要求

__str__

__str__方法返回的字符串应当简洁明了,重点突出对象的关键内容,以一种对用户友好的方式呈现。其目标是让用户能够快速、轻松地获取对象的核心信息,而无需过多关注技术细节。例如,对于一个自定义的Person类,__str__方法可能返回类似于"姓名:[具体姓名],年龄:[具体年龄]"的字符串格式,其中“具体姓名”和“具体年龄”是Person类实例的相应属性值。这样的字符串表示方式符合人类的阅读习惯,能够直观地传达出对象所代表的人物的基本信息。

__repr__

__repr__方法返回的字符串则需要更加精确和详细,要包含足够的信息以便能够准确地重新创建对象。它通常应遵循一种能够被Python解释器理解的格式,使得通过eval()函数执行该字符串能够还原出原始对象。例如,对于一个Point类的实例,表示一个二维平面上的点坐标,__repr__方法可能返回"Point([x坐标值], [y坐标值])"的形式,其中“[x坐标值]”和“[y坐标值]”分别是该点的横坐标和纵坐标。这种表示形式不仅明确地说明了对象的类型是Point,还详细给出了创建该点对象所需的坐标信息,方便开发者在需要时准确地重建相同的对象。

----------------------------------------------------------------------

好!下面进入正题(上面是AI给我的解释)

那么这两个到底区别在哪里呢,我将用一个案例展示出来__repr__它究竟好在哪?

首先我们来看一个代码:

class Stu:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"姓名: {self.name}, 年龄: {self.age}"
s = Stu("Alice", 20)
print(s)

代码很简单,定义一个学生类创建一个学生对象然后打印
在这里插入图片描述

接下来我们再来看

class Stu:def __init__(self, name, age):self.name = nameself.age = agedef __str__(self):return f"姓名: {self.name}, 年龄: {self.age}"
stu_list = [Stu("张三", 20), Stu("李四", 21), Stu("王五", 22)]
print(stu_list)

也很简单哈,我想创建一个学生列表,里面有三个学生,好接下来打印
在这里插入图片描述
这什么玩意看来它这也不行啊。此时__repr__就可以上场了

class Stu:def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return f"姓名:'{self.name}', 年龄:{self.age})"
stu_list = [Stu("张三", 20), Stu("李四", 21), Stu("王五", 22)]
print(stu_list)

好我们来打印它
在这里插入图片描述

我丢!*********************牛

总结:

文邹邹的解释一大通其实总结下来就是__repr__比__str__更牛,用就完了,所以平时可以直接选择__repr__。

相关文章:

Python中`__str__`和`__repr__`的区别(最清晰解释)

Python中__str__和__repr__的区别(最最最清晰的解释) 在Python的面向对象编程体系中,__str__和__repr__这两个特殊方法具有独特且重要的作用,尽管它们都涉及对象的字符串表示形式的定义,但在功能和使用场景上存在显著…...

Community Enterprise Operating System

起源与背景 CentOS项目始于2003年,由一群热心的Linux用户和开发者共同发起。 它的诞生旨在为用户提供一个免费且与RHEL高度兼容的操作系统,满足那些希望使用RHEL的稳定性和安全性但又不想支付商业许可费用的用户和组织的需求。 CentOS社区会将Red Hat…...

X (Twitter)养号指南:2024最新攻略

X (Twitter)作为活跃用户数以亿计的社交媒体平台,用户数依然在不断增长,其中巨大的流量吸引着个人用户与品牌和卖家。 Twitter养号是有必要的,有大量案例表明养好号,可以大幅度降低账号被冻结的几率,并提升账号的稳定…...

^M 字符处理

windows用的是\r\n来做分行的linux是\n 一、文本格式转换中的^M符号 跨平台文本文件: 当在Windows系统下编辑的文本文件被转移到Unix/Linux系统下打开时,由于Windows系统使用CRLF(\r\n)作为行结束符,而Unix/Linux系统…...

vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了

Vxe UI vue vxe-table v4.8 与 v3.10 解决了老版本虚拟滚动不支持动态行高的问题,重构了虚拟渲染,渲染性能大幅提升了,行高自适应和列宽拖动都支持,大幅降低虚拟渲染过程中的滚动白屏,大量数据列表滚动更加流畅。 自适…...

【新闻文本分类识别】Python+CNN卷积神经网络算法+深度学习+人工智能+机器学习+文本处理

一、介绍 文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集(“体育类”, “财经类”, “房产类”, “家居类”, “教育类”, “科技类”, “时尚类”, “时政类”, “游戏类”, “娱乐类”),然…...

算法效率的计算

目录 一、如何衡量一个算法的好坏?二、时间复杂度1. 时间复杂度的计算方法2. 时间复杂度习题 三、空间复杂度1. 空间复杂度的计算方法2. 空间复杂度习题 四、常见复杂度对比五、复杂度oj题1. 消失的数字2. 轮转数组 一、如何衡量一个算法的好坏? 如果一…...

迷茫内耗的一天

迷茫的一天 今天看了看动态规划,不知不觉看了三四个小时,英语也没背,项目也已经停止了一个星期就看了几个小时的xml文件(不停ctrlB),好累,感觉要学的好多。这难道是必经之路吗? 一个星期算法已经刷了40道题…...

【android12】【AHandler】【4.AHandler原理篇ALooper类方法全解】

AHandler系列 【android12】【AHandler】【1.AHandler异步无回复消息原理篇】-CSDN博客 【android12】【AHandler】【2.AHandler异步回复消息原理篇】-CSDN博客 【android12】【AHandler】【3.AHandler原理篇AHandler类方法全解】-CSDN博客 其他系列 本人系列文章-CSDN博客…...

在canon的生活

街道地址 朝阳区针织路23号中国人寿金融中心33层 大家好!【ji建军】 今天是在我佳能工作的最后一天,1989毕业后入公司,从一而终,三十五年整。 感谢宫里总经理和历届领导对我的信任和教导; (唐晓阳老师、内…...

萤石设备视频接入平台EasyCVR私有化部署视频平台高速公路视频上云的高效解决方案

经济的迅猛发展带来了高速公路使用频率的激增,其封闭、立交和高速的特性变得更加显著。然而,传统的人工巡查方式已不足以应对当前高速公路的监控挑战,监控盲点和响应速度慢成为突出问题。比如,非法占用紧急车道的情况屡见不鲜&…...

如何解决docker镜像下载失败问题

经常用docker的朋友都知道,docker hub的镜像仓库经常访问不通 rootiZwz97kfjnf78copv1ae65Z:~# docker pull ubuntu:18.04 Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.…...

Python_PyCharm无法打开终端命令行最终解决方案(实测)

关于PyCharm在加载库时出现无法打开终端的问题,相信大家已见到网上众多的添加变量的方式,但也有很多童鞋无法解决,那是因为我们忽略了我们测试虚拟化本身的环境因素,不多赘述,请看以下: 环境:V…...

若依-侧边栏开关按钮禁用,侧边栏始终保持展开

若依框架,当首页为echarts图时,侧边栏展开关闭echarts会超出 解决思路: 当菜单为首页时,侧边栏开关按钮禁用,侧边栏始终保持展开 \src\store\modules\app.jstoggleSideBar(withoutAnimation, typeVal) {if (typeVal …...

洛雪音乐 1.6.1| 全网音乐免费听,附加音源

洛雪音乐汇集了多个平台的音乐资源,让你可以免费播放各种热门音乐。有经典怀旧的老歌,有最近火爆网络的热曲,还有很多原创音乐人发布的最新作品。因触动资本利益,现已转为空壳软件,需要导入音源来使用。功能特点包括&a…...

进程(Process)、线程(Thread)和协程(Coroutine)

进程(Process)、线程(Thread)和协程(Coroutine)都是计算机中实现并发的重要概念,它们有以下区别: 进程是操作系统资源分配的最小单位,也是程序的一次执行过程。进程拥有独…...

蓝牙 BLE 详解

参考链接 BLE博客书籍推荐:Intro to Bluetooth Low Energy: The easiest way to learn BLE...

Spring 获取Header

Spring 获取Header 传统方法获取使用 Spring 获取 Header 传统方法获取 尝试获取一个 User-Agent,(表示的是哪个客户端在访问) // 传统方法获取 HeaderRequestMapping("/getHeader")public String getHeader(HttpServletRequest request) {String userAgent reques…...

第8课 字符串

一、字符串的创建 字符串(string)是Python中最常用的数据类型,是不可变序列的一种,序列的通用操作也适用于字符串。字符串的标志性符号是引号,单引号或者双引号都可以(注意:是英文输入法下的引号,必须成对…...

告别繁琐统计,一键掌握微信数据

微信数据管理的挑战在数字时代,微信已成为我们日常沟通和商业活动的重要工具。然而,随着微信号数量的增加,手动统计每个账号的数据变得越来越繁琐。从好友数量到会话记录,再到转账和红包,每一项都需要耗费大量的时间和…...

Seedance2.0内容创作干货!学会这四点教你用 Seedance 2.0 拍出电影感!

Seedance 2.0 之所以能把商业广告、影视制作的质感拉满,核心在于它对“全参调用”的支持。想彻底驯服它,建议你在输入 Prompt 和参数时注意以下四点:1. 结构化你的提示词不要把所有想法堆砌成一句话。Seedance 2.0 对结构化文本的理解极强&am…...

小米手表表盘设计革命:无需编程,5分钟打造个性化智能表盘

小米手表表盘设计革命:无需编程,5分钟打造个性化智能表盘 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 关键词: Mi-Creat…...

日语语音识别终极指南:5个技巧让Faster-Whisper-GUI准确率提升300%

日语语音识别终极指南:5个技巧让Faster-Whisper-GUI准确率提升300% 【免费下载链接】faster-whisper-GUI faster_whisper GUI with PySide6 项目地址: https://gitcode.com/gh_mirrors/fa/faster-whisper-GUI 想要在本地高效处理日语音频转写和字幕生成吗&am…...

《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织C++节点

简介: 上一小节我们用功能包组织了python节点,这节我们把C节点也装进功能包。 参考资料: 参考资料均来自于鱼香ROS社区创始人小鱼,资源如下: ①:【《ROS 2机器人开发从入门到实践》 2.3 使用功能包组织…...

告别复制粘贴:如何在 Cursor / 各种 IDE 中丝滑接入本地 AI 模型?

引言:AI 编程时代的囚徒困境 2026 年,AI 编程助手已经像 Git 一样成为每个开发者的标配。Cursor 的订阅量持续暴涨,GitHub Copilot 的免费版已经吸引了上千万用户,JetBrains 全线 IDE 都深度集成了 AI Agent。但在这个表面繁荣的生态之下,每一位开发者都在不知不觉中交出…...

山海再赴,探索向新|2026 第二届搜狐极限探索者大会盛大启航!

2025年6月5日,由搜狐主办的首届搜狐极限探索者大会在北京盛大举行。大会以“致敬极限探索者”(Salute to the Ultimate Explorers)为主题,汇聚中国上百位各极限运动领域顶尖的探索者、企业及明星嘉宾,通过巅峰演讲、深…...

CrapFixer深度解析:为什么这个7年老工具依然是Windows优化的首选

CrapFixer深度解析:为什么这个7年老工具依然是Windows优化的首选 【免费下载链接】Crapfixer Cr*ap Fixer 项目地址: https://gitcode.com/gh_mirrors/cr/Crapfixer 在Windows 11和Windows 10系统中,你是否厌倦了无处不在的广告、烦人的数据收集和…...

华硕笔记本终极控制工具G-Helper:如何用轻量级软件替代臃肿的Armoury Crate

华硕笔记本终极控制工具G-Helper:如何用轻量级软件替代臃肿的Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, V…...

3分钟掌握OBS智能跟拍:告别手动调焦的直播神器

3分钟掌握OBS智能跟拍:告别手动调焦的直播神器 【免费下载链接】obs-face-tracker Face tracking plugin for OBS Studio 项目地址: https://gitcode.com/gh_mirrors/ob/obs-face-tracker 您是否曾因直播时频繁调整镜头位置而分心?是否希望有一个…...

5分钟掌握HTML转Word:html-to-docx让文档格式转换变得简单高效

5分钟掌握HTML转Word:html-to-docx让文档格式转换变得简单高效 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 还在为HTML内容无法完美转换为Word文档而烦恼吗?html-to-docx是…...