Python中__repr__和__str__方法的区别|留学生CS辅导帖

news/2024/11/20 23:29:49/

Python中__repr____str__方法的区别

你好,我是悦创。

问题

__repr____str__有什么区别?

解答

__repr____str__方法在Python中都用于为对象提供字符串表示形式,但它们之间存在一些区别,主要体现在用途和实现上:

  1. 用途:

    • __repr__:主要用于调试和开发。__repr__方法的目标是返回一个字符串,用于准确地描述如何重新创建对象。这样,在解释器中输入对象名字时,就会看到这个字符串。__repr__方法的返回值通常适用于开发人员,以便更好地理解对象的内部结构和状态。
    • __str__:主要用于最终用户。__str__方法的目标是返回一个用户友好的字符串,以便于阅读和理解。这个字符串通常用于向用户展示有关对象的信息。当你调用print()函数或使用str()函数时,Python会自动调用类的__str__方法。
  2. 实现:

    • 如果类中只实现了__repr__方法,而没有实现__str__方法,那么当调用print()str()时,Python会使用__repr__方法的返回值作为备选。
    • 如果类中同时实现了__repr____str__方法,那么__repr__方法将用于解释器中的对象表示以及repr()函数,而__str__方法将用于print()函数和str()函数。
    • 如果类中没有实现__repr__方法,Python会使用默认的实现,通常返回一个字符串,包含类名和对象在内存中的地址。

下面是一个例子,展示了实现__repr____str__方法的区别:

class Person:def __init__(self, name, age):self.name = nameself.age = agedef __repr__(self):return f"Person('{self.name}', {self.age})"def __str__(self):return f"{self.name}, {self.age}岁"person1 = Person("张三", 25)# 输出对象的字符串表示形式
print(repr(person1))  # 输出:Person('张三', 25)
print(person1.__repr__())  # 输出:Person('张三', 25)# 输出用户友好的字符串表示形式
print(str(person1))  # 输出:张三, 25岁
print(person1.__str__())  # 输出:张三, 25岁
print(person1)  # 输出:张三, 25岁(因为实现了__str__方法,此处使用__str__方法的结果)

在这个例子中,我们定义了一个Person类,它包含__repr____str__两个方法。__repr__方法返回一个用于重新创建对象的字符串,而__str__方法返回一个用户友好的字符串。这样,当我们使用repr()函数或直接输入对象名字时,我们会看到__repr__方法返回的字符串。而当我们使用print()函数或str()函数时,我们会看到__str__方法返回的字符串。

总之,__repr____str__方法在Python中都用于为对象提供字符串表示形式,但它们分别针对不同的使用场景。__repr__方法主要用于调试和开发,返回一个准确描述如何重新创建对象的字符串,而__str__方法主要用于最终用户,返回一个用户友好的字符串。在实现时,如果类中只实现了__repr__方法,那么在调用print()str()时,Python会使用__repr__方法的返回值作为备选。如果类中同时实现了__repr____str__方法,则分别在不同的场景下调用。


http://www.ppmy.cn/news/66746.html

相关文章

队列、栈专题

队列、栈专题 LeetCode 20. 有效的括号解题思路代码实现 LeetCode 921. 使括号有效的最少添加解题思路代码实现 LeetCode 1541. 平衡括号字符串的最少插入次数解题思路代码实现 单调栈LeetCode 496. 下一个更大元素 I解题思路代码实现 LeetCode 739. 每日温度解题思路代码实现 …

一个网站引发的程序猿的牢骚,哈哈哈

2013年大学毕业后,参加工作做的第一个前端项目,北京服装学院,今天调研一个关于iframe的需求,突然想试试,以前那些做IE6兼容的项目是否还在使用,就默默的点开了。十年了,他们没有换网站&#xff…

【Pandas与SQL系列】Pandas实现分布函数percent_rank、cume_dist

目录 1,分布函数,1.1,percent_rank()1.2,cume_dist()1.3 SQL例子 2,Pandas 实现3,补充Pandas实现排序 1,分布函数, 应用场景:快速查看某个记录所归属的组内的比例 分布函数分类及基础语法&…

JAVA-代码块和内部类

文章目录 目录 文章目录 前言 1.代码块 1.1什么是代码块? 1.2代码块的分类及作用: 1.静态代码块 2.成员代码块(又叫做构造代码块) 3.局部代码块 2.内部类 2.1 什么是内部类? 2.2 内部类的分类 1.成员内部类 2.静态内部类 3.匿名内部类 4.局部内部类 总结 前言 作者简介:我是最…

PSP - AlphaFold2 适配不同来源搜索的 MSA 接口

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130594303 MSA (Multiple Sequence Alignment) 在 AlphaFold2 中的工作方式如下: 使用搜索工具 (hhblits/hhsearch/jackhmmer),从大型数据库中,搜索与目标…

PCL学习九:Registration-配准

参考引用 Point Cloud Library黑马机器人 | PCL-3D点云 PCL点云库学习笔记(文章链接汇总) 1. 点云中的数学 函数求导 对于函数 f ( x ) x 2 f(x)x^2 f(x)x2 其一阶导数也是 x x x 的函数: d f d x 2 x \frac{df}{dx}2x dxdf​2x其二阶导…

struct模块进行数据打包

原理: 将一组简单数据进行打包,转换为bytes格式发送。或者将一组bytes格式数据,进行解析。 接口使用 Struct(fmt) 功能: 生成结构化对象 参数:fmt 定制的数据结构 st.pack(v1,v2,v3…) 功能: 将一组数据按照指定格式打包转换为by…

土地报征简介

报征概念: 土地报征是指国家为了人民整体利益出发,根据我国相关法律和法规的要求和流程, 将集体土地性质转化为国有土地性质,并给予被征地的对象给予合理的补偿和安置工作。报征4个价段: 1、组卷阶段 (1&…