第8.15节 Python重写自定义类的__repr__方法
一、 引言
前面两节分别介绍了Python类中的__str__和__repr__方法的作用和语法,所有新式类都支持这两个方法,因为object类实现了这两个方法,但实际上各位开发者在自定义类的过程中,应该重写相关方法,特别是__str__输出的应该是用户关注的容易理解的信息,因此对那些负责与客户交互的类,至少更应该重写__str__方法。
二、 重写__repr__方法
object类提供的__repr__方法,只是简单输出模块名、类名以及对象的ID信息,如果开发者要输出开发人员足够知悉的属性,就需要重写该方法。
重写__repr__方法注意:
- __repr__方法是实例方法,因此带一个参数self,也只能带这个参数;
- 输出的信息尽可能满足开发者的要求,信息必须详尽和准确;
- 可以调用父类的__repr__方法,也可以不调用,需要看开发时输出信息的安排,老猿建议最好调用,这样不用子类开发者去考虑父类的信息怎么输出。
三、 例子 - 例子说明
本节利用Car类来说明__repr__方法,在类中重写了__repr__方法,返回的信息包括:
- 证明调用了重写方法的“In repr:”提示;
- 调用repr(self.class),id(self)获取的对象的类名和ID基础信息;
- 使用__dict__特殊属性输出类的自定义属性及值的字典数据。
- 案例代码
1> 类定义
class Car(): def __init__(self,brand,type,color,weight,oilcostper100km):self.brand = brandself.type = typeself.oilcostper100km = oilcostper100kmself.color = colorself.weight = weightdef __repr__(self):s="In __repr__:\n <{} object at {:#016x}>\n".format(repr(self.__class__),id(self) )#使用类相关的信息输出类名和实例IDs+=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__方法,效果会怎样?
- 案例截图
- 案例总结
通过《第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的世界。
欢迎大家批评指正,谢谢大家关注!
转载于:https://www.cnblogs.com/LaoYuanPython/p/11144509.html
第8.15节 Python重写自定义类的__repr__方法相关推荐
- Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?
这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...
- java 对象重写equals方法_Java如何重写object类的equals方法详解
1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...
- python 自定义类(特殊方法)
文章目录 1. 对象表示形式 2. 可散列的类 3. 私有属性的利弊 4. `__slots__` 类属性节省空间 5. 覆盖类属性 learn from <流畅的python> from ...
- python中自定义类中的self_Python类和构造方法
1.面向对象介绍 描述:是函数的一个变种,在Python中,有函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中有了选择,可能就变得 ...
- 第11.15节 Python正则表达式转义符定义的特殊序列
一. 引言 在前面<第11.13节 Python正则表达式的转义符"\"功能介绍>介绍了正则表达式转义符'\',只不过当时作为转义符主要是用于在正则表达式中表示元字符自 ...
- 《手把手陪您学Python》42——类的魔法方法
在上一篇<手把手陪您学Python>41--类方法与实例方法中,我们引入了类方法的概念,并介绍了类方法与实例方法在语法规则和引用方面的差异.今天,我们将会继续介绍实例方法的应用,并介绍一种 ...
- WebService中使用自定义类的解决方法(5种)
转自:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lx ...
- 重写Object类的equals方法
package com.learn.demo01.Object;import java.util.ArrayList;public class Demo02Equals {public static ...
- idea 汉化版 自定义类注释与方法注释 解决自定义注解出现红线
1.添加自定义方法注释 演示用的idea 版本为2020.1 步骤一: 选择File ----Settings 步骤二: 选择 Live Templates----选择加号-选择 Template G ...
最新文章
- Java 性能优化实战记录(1)---定位并分析耗cpu最多的线程
- Python中MD5加密字符串
- 一个项目经理的一些个人体会
- .NET轻量级ORM框架Dapper入门精通
- C/C++变量命名规则,个人习惯总结
- evc4工程移植vs.net2005所碰到的问题积累
- python yield from yield_python yield和yield from用法总结详解
python yield和yield from用法总结...
- mysql分析sql语句性能_sql语句执行性能分析
- pg10 10.3 1 linux64,Install Postgresql 10 In Ubutnu 16.04 LTS
- Nacos Spring Cloud 快速开始
- pcl1.8.1+vs2017
- [翻译]Chameleon介绍(6) : 动作控件
- C++ 正则表达式教程:C++ 中的正则表达式与示例
- 山东理工大学ACM平台题答案关于C语言 1580 闰年
- [HDCTF2019]Maze
- 2.字节跳动2019雀魂启动
- bom成本分析模型_如何计算一台汽车的BOM成本?
- Excel表格文本/数字/科学计数法的格式转换问题
- U盘文件变成快捷方式的解决方案
- 数模--0-1规划问题~Matlab中 intlinprog函数用法简介