一文让你彻底搞懂Python中__str__和__repr__

一文让你彻底搞懂Python中__str__和__repr__

在Python中,__str____repr__是两个常用的魔术方法,它们都可以用来返回对象的字符串表示,但是有些细微的区别。

__str____repr__的区别

总体来说,__repr__用于开发者调试、测试和错误记录,而__str__用于最终用户展示。

当你需要了解对象的内部细节时,可以打印__repr__的返回值;当你需要展示对象的信息给最终用户时,可以打印__str__的返回值。两者的目的不同,返回值的风格也不同。

__repr__

__repr__用于返回对象的字符串表示,通常这个字符串可以用来重建当前对象。在Python中,如果一个对象没有定义__str__方法,解释器会调用__repr__方法来显示对象。

示例1:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person({self.name}, {self.age})"

p = Person("Tom", 18)
print(p)  # 当没有定义__str__时,会调用__repr__方法来显示对象

输出:

Person(Tom, 18)

示例2:

>>> import datetime
>>> d = datetime.datetime.now()
>>> d
datetime.datetime(2021, 11, 27, 12, 21, 35, 158157)
>>> repr(d)
'datetime.datetime(2021, 11, 27, 12, 21, 35, 158157)'

__str__

__str__用于返回对象的字符串表示,通常这个字符串可以用来展示给最终用户。在Python中,如果一个对象定义了__str__方法,可以使用print等函数来展示对象。

示例1:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f"Person({self.name}, {self.age})"

    def __str__(self):
        return f"Name: {self.name}, Age: {self.age}"

p = Person("Tom", 18)
print(p)  # 使用__str__方法来显示对象

输出:

Name: Tom, Age: 18

示例2:

>>> import datetime
>>> d = datetime.datetime.now()
>>> d.__str__()
'2021-11-27 12:21:35.158157'
>>> str(d)
'2021-11-27 12:21:35.158157'

总结

在编写Python代码时,我们应该在类中同时定义__str____repr__方法。__repr__方法用于对象的调试、测试和错误记录,__str__方法用于最终用户展示。

两者的实现方式可能有所不同,__repr__方法通常返回一个可以重建对象的字符串,而__str__方法通常返回一个展示给用户的字符串。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一文让你彻底搞懂Python中__str__和__repr__ - Python技术站

(0)
上一篇 2023年6月2日
下一篇 2023年6月2日

相关文章

  • Python整数对象实现原理详解

    请看下面的详细讲解。 Python整数对象实现原理详解 什么是Python整数对象? 在Python中,整数是最基本的数据类型之一,它用来表示整数值。Python整数对象是指在Python中用来存储整数值的对象。在Python中,整数对象是不可变的,即一旦创建了一个整数对象,就不能在原地修改它的值。 Python整数对象的实现原理 在Python中,整数对象…

    python 2023年5月19日
    00
  • python3爬虫中多线程的优势总结

    在Python3爬虫中,使用多线程可以提高爬取效率,加快数据获取速度。本文将详细讲解Python3爬虫中多线程的优势,并提供两个示例,演示如何使用Python3多线程爬取数据。 多线程的优势 使用多线程可以提高爬取效率,加快数据获取速度。以下是多线程的优势: 提高效率:多线程可以同时处理多个任务,提高效率。 加快速度:多线程可以同时下载多个文件,加快数据获取…

    python 2023年5月15日
    00
  • 教你利用Python破解ZIP或RAR文件密码

    教你利用Python破解ZIP或RAR文件密码 1. 背景 在日常生活中,我们经常会遇到需要解压缩存储在ZIP或RAR压缩包中的文件的情况。然而,有时候我们会因为忘记了密码或者压缩包密码被他人更改而无法正常解压缩。此时,如果我们有能力利用Python破解ZIP或RAR文件的密码,就能够顺利解压缩被密码保护的文件。下面,我将为大家详细讲解利用Python破解Z…

    python 2023年6月3日
    00
  • 编程语言Python的发展史

    编程语言Python的发展史 Python是一门高级编程语言,由Guido van Rossum在1989年末和1990年初设计出来。Python的设计目标是”易读性”,使得Python成为一门简洁、易于学习的语言。 发展历程 Python 1.0 Python 1.0于1994年发布,是Python第一个正式版本。这个版本包括了模块化编程、函数和异常处理等…

    python 2023年5月30日
    00
  • Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例

    Python Cookbook 中提供了多种查找最大或最小的 N 个元素的实现方法示例,下面我们就来详细讲解其中两个实现方法。 heapq.nlargest 和 heapq.nsmallest 示例 heapq 模块是 Python 中用于实现堆排序算法的模块,我们可以使用该模块中的 nlargest 和 nsmallest 函数来实现找到序列中最大或最小的…

    python 2023年5月14日
    00
  • Python程序设计入门(4)模块和包

    下面我将为你详细讲解Python程序设计入门(4)模块和包的完整攻略。 什么是Python模块和包 在Python中,模块(module)是一个包含Python代码的文件,而包(package)是一个包含多个模块的目录,它们的存在可以方便地管理和组织代码。 模块和包的使用可以方便地模块化你的程序,让代码更加易于维护和扩展,同时还能提高代码的可复用性和可读性。…

    python 2023年5月31日
    00
  • python 使用OpenCV进行简单的人像分割与合成

    下面我将详细讲解如何使用Python和OpenCV进行简单的人像分割与合成。 什么是OpenCV? OpenCV是一个开源的跨平台计算机视觉库,可用于开发实时图像处理、计算机视觉、人机交互、物体识别等应用。OpenCV支持多种编程语言,包括C++、Python和Java等。 人像分割 人像分割是指将一张图片中的人像从背景中分离出来。在OpenCV中,我们可以…

    python 2023年6月6日
    00
  • 利用Python制作本地Excel的查询与生成的程序问题

    那我先给个简单的概述。本地Excel的查询与生成主要是针对Excel表格进行操作,在Python中可以使用第三方库如openpyxl来实现。具体的实现步骤包括Excel表格的读取、写入和查询。下面我会详细讲解每个步骤,并提供两个示例说明。 1. Excel表格读取 可以使用openpyxl库中的load_workbook函数来读取Excel表格。该函数会返回…

    python 2023年5月13日
    00
合作推广
合作推广
分享本页
返回顶部