第8.15节 Python重写自定义类的__repr__方法

【Python】详解类的 __repr__() 方法 引言 描述 object.__repr__(self) Called by the repr() built-in function to compute the “official” string representation of an object. If at all possible, this should look like a valid Python expression that could be used to recreate an object with the same val 阅读详情

一、 引言
前面两节分别介绍了Python类中的__str__和__repr__方法的作用和语法,所有新式类都支持这两个方法,因为object类实现了这两个方法,但实际上各位开发者在自定义类的过程中,应该重写相关方法,特别是__str__输出的应该是用户关注的容易理解的信息,因此对那些负责与客户交互的类,至少更应该重写__str__方法。
二、 重写__repr__方法
object类提供的__repr__方法,只是简单输出模块名、类名以及对象的ID信息,如果开发者要输出开发人员足够知悉的属性,就需要重写该方法。
重写__repr__方法注意:

  1. __repr__方法是实例方法,因此带一个参数self,也只能带这个参数;
  2. 输出的信息尽可能满足开发者的要求,信息必须详尽和准确;
  3. 可以调用父类的__repr__方法,也可以不调用,需要看开发时输出信息的安排,老猿建议最好调用,这样不用子类开发者去考虑父类的信息怎么输出。
    三、 例子
  4. 例子说明
    本节利用Car类来说明__repr__方法,在类中重写了__repr__方法,返回的信息包括:
  1. 证明调用了重写方法的“In repr:”提示;
  2. 调用repr(self.class),id(self)获取的对象的类名和ID基础信息;
  3. 使用__dict__特殊属性输出类的自定义属性及值的字典数据。
  1. 案例代码
    1> 类定义
class Car():  
    def __init__(self,brand,type,color,weight,oilcostper100km):
        self.brand = brand
        self.type = type
        self.oilcostper100km = oilcostper100km
        self.color = color
        self.weight = weight
      
    def __repr__(self):
        s="In __repr__:\n    <{} object at {:#016x}>\n".format(repr(self.__class__),id(self) )#使用类相关的信息输出类名和实例ID
        s+=super().__repr__() #直接调用object.__repr__方法输出类信息和实例ID
        #通过实例的self.__dict__获取实例的详细属性信息,注意使用了repr函数去获取字典信息字符串
        s+='\n'+repr(self.__dict__)
        return s

2> 实例定义及查看信息()

car = Car('雪佛兰','科帕奇','白色',1.8,10)
car #查看实例信息,此时会调用__repr__方法
print(car) #查看实例信息,此时会调用__str__方法,但没有重写__str__方法,效果会怎样?
  1. 案例截图在这里插入图片描述
  2. 案例总结
    通过《第8.13节 Python类中内置方法的__repr__详解》知道,没有重写__repr__方法时,调用的是object类的__repr__方法,仅输出简单的类信息和ID信息。通过上述案例说明:
    1> 重写__repr__方法后,查看对象会触发重写方法的调用,其他触发方式请见《第8.13节 Python类中内置方法__repr__详解》,在例子中没有再展开介绍;
    2>object类__repr__方法输出结果与repr(self.class),id(self)获取的基础信息相同,而直接调用object类__repr__方法更简单,因此老猿建议对基础信息的输出还是直接调用父类的方法输出;
    3> 使用print(car)应该输出__str__方法返回的内容,但实际输出的是重写__repr__方法输出的内容。这是因为自定义类没有重写__str__方法的情况下,Python会直接调用__ repr __方法输出,要输出单独的__str__信息需要重写__str__方法,这个在下节将进行验证。

本节结合案例介绍了 __repr__方法的重写,可以看到通过重写该方法如果输出数据得当,相关信息有利于程序调试和跟踪。
老猿Python系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。
欢迎大家批评指正,谢谢大家关注!

Python3中的魔术方法汇总 1.魔术方法简介 Python 中的魔术方法(Magic)方法,是那些被__包围的方法,在对象继承时,子类可以重写父类的魔术方法以实现定制功能,用于增强Python面向对象编程的能力。魔术方法在创建对象或对象操作时自动调用,不需要显式使用。譬如当我们判断对象是否相等时只使用了==符号,并未显式调用__eq__方法,但却实现了判断两个实例是否相等的功能,犹如变魔法一般。魔术方法按功能可分为如下几类, 1.构造、初始化和析构对象 2.控制属性读写 3.对象的表示和描述,如__str__等 4.在定制类对象间支 阅读详情

相关推荐

Python面向对象编程:精雕细琢对象的“名片”——重写 `__str__()` 和 `__repr__()` 方法

_str__()和__repr__()方法是Python中非常重要的特殊方法,它们用于定义对象的字符串表示形式。正确地重写这两个方法可以提高代码的可读性、调试效率和用户体验。在实际开发中,我们应该养成良好的习惯,同时重写__str__()和__repr__()方法,并遵循最佳实践,使我们的代码更加清晰、易懂和易于维护。希望本文能够帮助读者更好地理解和应用这两个方法。

铭渊老黄 369

python的class的__str__()和__repr__()函数

    repr(object)返回一个可以用来表示对象的可打印字符串首先,尝试生成这样一个字符串,将其传给 eval()可重新生成同样的对象 否则,生成用尖括号包住的字符串,包含类型名和额外的信息(比如地址) 一个类(class)可以通过 __repr__() 成员来控制repr()函数作用在其实例上时的行为。   str([object])返回一个可以用来表示对象的可打印的友好...

weixin_33881050的博客 428

华为2022硬件逻辑笔试题

单选题(每题两分) 1.以下关于过程赋值的描述,不正确的是() A在非阻塞性过程赋值中,使用赋值符号“< =” B赋值操作符是“=”的过程赋值是阻塞性过程赋值 C在非阻塞性过程赋值中,对目标的赋值是非阻塞的(因为时延),但可预定在将来某个时间步发生(根据时延:如果是0时延,那么在当前时间步结束) D非阻塞性过程赋值在其后所有语句执行前执行 解:D 2.芯片的功耗和下列哪种不强相关_____________。 A资源利用率 B核电压 C组合逻辑级数 D翻转率 解:A 3.下列说

weixin_44072819的博客 1万+

探索Python内置类属性__repr__:展示对象的魅力与实用性

在Python中,每个对象都有一个内置的__repr__属性,它提供了对象的字符串表示形式。这个特殊的属性在调试、日志记录和交互式会话等场景中非常有用。本文将详细介绍__repr__属性的使用教程,包括定义、常见应用场景和注意事项,帮助读者更好地理解和使用这个高级特性。

Rocky006的博客 2147

基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计与实现(附源码、仿真与计算书)

本文详细介绍了基于STM32F334C8T6的四开关Buck-Boost双向DC-DC电源设计方案。该设计利用STM32的高分辨率定时器(HRTIM)实现精确PWM控制,支持Buck、Boost和Buck-Boost三种工作模式自动切换,具备双向能量流动能力。通过PSIM仿真和Mathcad计算书进行参数优化,实测效率达95.8%,适用于新能源系统和电池管理等场景。

www00的博客 528

Omnibox 2.11 NAS部署指南:家庭影音中枢的轻量化落地实践

家庭影音平台本质是本地化内容调度中枢,其核心在于聚合NAS媒体库、统一管理直播/IPTV/音频/视频等多源内容,并通过智能元数据匹配与硬解加速实现零门槛播放体验。技术原理上依赖Java轻量Web容器(Jetty)、SQLite嵌入式数据库双缓存架构,以及宿主机FFmpeg动态链接与HTTP/2直播代理治理能力。该方案显著降低4K播放卡顿、EPG加载失败、海报缺失等高频问题,适用于群晖、飞牛、绿联等主流NAS设备,尤其适配ARM64芯片与Realtek网卡等国产硬件生态。本文聚焦Omnibox 2.11在真实

weixin_30846347的博客 471

Python中的魔法方法__repr__和__str__详解

当我们直接打印一个python类对象时,得到的通常是类似“”这样一段字符,无法获得对象的具体状态。这个时候我们就可以重新定义/重写对应类的魔术方法__repr__和__str__,使得我们在打印对象时能够获得对象的当前状态信息。

gemingxuan的博客 3587

C#实战:5分钟搞定Modbus RTU通讯(基于NModbus4库)

本文详细介绍了如何使用C#和NModbus4库快速实现Modbus RTU通讯,包括环境配置、核心功能实现、性能优化及常见问题排查。通过代码示例和实用技巧,帮助开发者高效完成工业自动化设备的数据采集与控制任务。

weixin_30689307的博客 467

第8.22节 Python案例详解:重写 “富比较”方法控制比较逻辑

一、 案例说明 本节定义一个小汽车的类Car,类中包括车名carname、百公里油耗oilcostper100km、价格price三个...

weixin_30740581的博客 113

ANSYS命令流黑箱揭秘:流体渗透压力载荷的七种收敛优化策略

本文深入解析ANSYS Workbench中流体渗透压力载荷的七种收敛优化策略,重点探讨接触探测点迭代逻辑、PPCN阈值动态调整及FPAT参数优化等关键技术。通过命令流示例和实战技巧,帮助工程师有效解决流体与结构相互作用仿真中的收敛难题,提升计算效率和精度。

weixin_29274337的博客 523

【高级雷达感知与学习】 第十三章 可解释性与物理–感知融合(Physics-Informed ML)

本文提出了一种面向雷达感知的物理约束学习方法,将雷达物理先验(RCS、SNR、距离衰减)嵌入神经网络,解决纯数据驱动模型的样本效率低、泛化能力弱和决策不可信问题。通过三种融合范式(混合建模、物理正则化、PINNs)实现机理与数据协同建模,并设计了物理引导显著图解决雷达可解释性语义错位问题。实验表明,物理约束可提升40%样本效率,增强低信噪比场景鲁棒性。代码实现包含物理正则化损失、可解释性分析和消融实验,为雷达感知系统提供了可迁移的工程范本。

VectorShift的博客 186

第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析

一、 引言 《第8.21节 Python中__lt__、gt__等 “富比较”(“rich comparison”)方法用途探究》和《第8.22节 Python案例详解:重写 “富比较”方法控制比较逻辑》介绍了富比较方法及执行比较操作与富比较的对应关系,本节将通过案例分析排序操作与富比较方法的对应关系。 二、 案例说明 复用上节定义的类Car(如果你没看上节可以忽略这个背景,因为代码是完整的),包...

老猿Python 3124

海康视觉算法平台VisionMaster 4.3.0 C# 二次开发01 加载方案并获取结果

第一次使用海康视觉算法平台VisionMaster 4.3.0,项目中要使用这个平台进行视觉处理并获取结果。

StevenChen的博客 7875

利用Python特殊变量__dict__快速实现__repr__的一种方法

在《第8.15节 Python重写自定义类的__repr__方法》、《Python中repr(变量)和str(变量)的返回值有什么区别和联系》、《第8.13节 Python类中内置方法__repr__详解》介绍了__repr__和重写__repr__的相关要求,__repr__方法的主要目的是输出开发人员能看懂的“官方”信息,便于程序调试和调试人员用输出信息快速定义一个与观察对象内容完全相同的变量...

老猿Python 2457

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

第8章 Python类中常用的特殊变量和方法目录

第8章 8.1节 Python类中常用的特殊变量和方法 第8.2节 Python类的__init__方法深入剖析:构造方法案例详解 第8.3节 Python类的__init__方法深入剖析:构造方法与继承详解 第8.4节 Python类中不是构造方法却胜似构造方法的__new方法__深入剖析:语法释义 第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执...

老猿Python 1557

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Python __str__和__repr__方法详解:调试友好与用户友好的双协议设计

在Python对象模型中,__str__和__repr__是支撑可读性与可调试性的核心协议。__str__面向终端用户,强调自然语言表达与业务语义;__repr__面向开发者,要求无歧义、可重建、能被eval安全执行。二者共同构成Python的‘人机双模’输出契约,直接影响日志分析效率、pdb调试体验、Jupyter变量检查及API响应质量。掌握其设计原理(如repr的黄金公式ClassName(arg=val, ...))、字符串构建规范(优先f-string+!r)、嵌套控制(reprlib.Repr)

483

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python方法重载与重写:从原理到工程实践

在动态类型语言中,方法重载(Method Overloading)与方法重写(Method Overriding)代表两种根本不同的多态范式:前者关注同一接口对多种输入类型的适配能力,依赖运行时分发机制;后者基于继承链的名称解析(MRO)与super()协作,实现行为的可扩展覆盖。Python不支持编译期重载,但通过isinstance分支、functools.singledispatch、@overload类型提示及Protocol协议等手段,可安全模拟灵活参数处理;而重写则是其面向对象体系的核心支柱,广

weixin_30666401的博客 355

「Python 避坑 · 第 15 篇」继承体系搭好了,方法找不到了

如果你身边也有一个被多重继承折磨的朋友,把这篇文章转给 ta——「你看,毛毛姐的菱形继承,方法找不到了。」

MARST.ZHANG的博客 143

Python 的内置方法

Python 中的类提供了一些内置方法(也称为魔术方法或特殊方法),它们以双下划线开头和结尾,用于实现特定的行为和功能。这些内置方法可以被重写,以定制类的行为,使其适应特定的需求。通过重写这些内置方法,我们可以自定义类的行为,使其具有更多的灵活性和定制性。这些内置方法提供了类与其他 Python 内置类型的一致性,使我们能够以一种统一的方式与对象进行交互。

我有明珠一颗的博客 360

python 多态、多继承、函数重写、迭代器

用于类的函数 issubclass(cls,class_or_tuple) 判断一个类是否继承自其他的类,如果此类cls是class或tuole中的一个派生(子类)则返回True,否则返回False 封装 enclosure 封装的目的是让使用者尽可能少的引用实例变量(属性)进行操作 私有属性:python类中,以双下划线‘__’开头,不以双下划线结尾的标识符为私有成员,在类的外部无法直接...

weixin_30444105的博客 84

Python — magic method

Python 中内置的特定的方法, 这些方法在进行特定的操作时,会自动被调用。 __init__(self, [ ]) # 类的构造函数, 用于初始化实例变量 不允许做任何形式的return __new__(cls, [ ]) # 类的内置方法 对象实例化过程中第一个被调用的方法   由于__init__()方法不能够返回一个非None的值,因此在实例化对象时不能够通过该方法对...

dbsxhsb5899的博客 222

自定义输出内容 __str__() 和 __repr__() 以及__format__() 的使用

一: __str__() 和 __repr__() 保留方法: 1 class DemoClass: 2 def __init__(self,name,age): 3 self.name = name 4 self.age = age 5 6 def __str__(self): 7 #pr...

weixin_30497527的博客 164
上一篇: Python中的enumerate函数的作用
下一篇: Python中sorted(iterable, *, key=None, reverse=False)函数参数定义中的独立星号(*)的含义
LaoYuanPython
LaoYuanPython 2020年博客之星Top3 2020年博客之星Top3 领域专家: Python技术领域 领域专家: Python技术领域
博客等级 码龄8年 15万+粉丝 1324原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值