一、 引言
前面两节分别介绍了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 = 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__方法,效果会怎样?
  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的世界。
欢迎大家批评指正,谢谢大家关注!

转载于:https://www.cnblogs.com/LaoYuanPython/p/11144509.html

第8.15节 Python重写自定义类的__repr__方法相关推荐

  1. Python中自定义类如果重写了__repr__方法为什么会影响到str的输出?

    这是因为Python3中,str的输出是调用类的实例方法__str__来输出,如果__str__方法没有重写,则自动继承object类的__str__方法,而object类的__str__方法是调用_ ...

  2. java 对象重写equals方法_Java如何重写object类的equals方法详解

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...

  3. python 自定义类(特殊方法)

    文章目录 1. 对象表示形式 2. 可散列的类 3. 私有属性的利弊 4. `__slots__` 类属性节省空间 5. 覆盖类属性 learn from <流畅的python> from ...

  4. python中自定义类中的self_Python类和构造方法

    1.面向对象介绍 描述:是函数的一个变种,在Python中,有函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中有了选择,可能就变得 ...

  5. 第11.15节 Python正则表达式转义符定义的特殊序列

    一. 引言 在前面<第11.13节 Python正则表达式的转义符"\"功能介绍>介绍了正则表达式转义符'\',只不过当时作为转义符主要是用于在正则表达式中表示元字符自 ...

  6. 《手把手陪您学Python》42——类的魔法方法

    在上一篇<手把手陪您学Python>41--类方法与实例方法中,我们引入了类方法的概念,并介绍了类方法与实例方法在语法规则和引用方面的差异.今天,我们将会继续介绍实例方法的应用,并介绍一种 ...

  7. WebService中使用自定义类的解决方法(5种)

    转自:http://www.cnblogs.com/lxinxuan/archive/2007/05/24/758317.html Demo下载:http://files.cnblogs.com/lx ...

  8. 重写Object类的equals方法

    package com.learn.demo01.Object;import java.util.ArrayList;public class Demo02Equals {public static ...

  9. idea 汉化版 自定义类注释与方法注释 解决自定义注解出现红线

    1.添加自定义方法注释 演示用的idea 版本为2020.1 步骤一: 选择File ----Settings 步骤二: 选择 Live Templates----选择加号-选择 Template G ...

最新文章

  1. Java 性能优化实战记录(1)---定位并分析耗cpu最多的线程
  2. Python中MD5加密字符串
  3. 一个项目经理的一些个人体会
  4. .NET轻量级ORM框架Dapper入门精通
  5. C/C++变量命名规则,个人习惯总结
  6. evc4工程移植vs.net2005所碰到的问题积累
  7. python yield from yield_python yield和yield from用法总结详解 python yield和yield from用法总结...
  8. mysql分析sql语句性能_sql语句执行性能分析
  9. pg10 10.3 1 linux64,Install Postgresql 10 In Ubutnu 16.04 LTS
  10. Nacos Spring Cloud 快速开始
  11. pcl1.8.1+vs2017
  12. [翻译]Chameleon介绍(6) : 动作控件
  13. C++ 正则表达式教程:C++ 中的正则表达式与示例
  14. 山东理工大学ACM平台题答案关于C语言 1580 闰年
  15. [HDCTF2019]Maze
  16. 2.字节跳动2019雀魂启动
  17. bom成本分析模型_如何计算一台汽车的BOM成本?
  18. Excel表格文本/数字/科学计数法的格式转换问题
  19. U盘文件变成快捷方式的解决方案
  20. 数模--0-1规划问题~Matlab中 intlinprog函数用法简介

热门文章

  1. java 管理对象是什么_Java工程师(16)对象的管理
  2. 媒体声音|阿里云数据库:一站式全链路数据管理与服务,引领云原生2.0时代
  3. 资深美术师:3A转手游研发需要注意的方法
  4. DOTA2:IG实力不如Nigma?解说:错了,让门票给他们自己回家训练
  5. PHP面试题:简述Linux下安装PHP的过程?
  6. 微软给程序代码加的css效果
  7. 超图iserver登录密码忘记,重置密码
  8. mysql 终止 存储过程
  9. github删除错误的commit并保留之前的提交
  10. ant使用指南详细入门教程