当我们在交互环境下输入对象时会直接显示对象的信息,交互环境下输入print(对象)或代码中print(对象)也会输出对象的信息,这些输出信息与两个内置方法:__str__方法和__repr__方法有关,这两个方法Python中的所有类型(新式类)的基类object中实现了这个通用的功能,本节详细分析__repr__方法。

一、 object类内置方法__repr__和函数repr

类的内置方法__repr__和内置函数repr实际上实现的是同一功能,实际上repr调用的就是__repr__方法,只是调用方式不同,二者调用的语法如下:

实例对象. repr()

repr(对象)

返回值为一个字符串对象,该字符串对象类似一种“官方”字符串表示,为什么说是”官方”呢,这是因为Python建议大部分情况下这个字符串应类似一个有效的 Python 表达式,能被用来重建具有相同取值的对象。如做不到至少应返回形如 <…someuseful description…>的字符串信息。 此方法通常被用于调试时显示详细的对象信息,便于开发者使用,因此需要尽可能确保其包含丰富完整的信息且无歧义。

二、 __repr__和函数repr方法的使用

由于object类定义了__repr__方法,因此所有类都会继承该方法,除非有自定义类重写了该方法。

什么情况下会触发__repr__方法呢?主要有如下情况会触发__repr__的调用:

  1. 在交互环境下直接输入对象名查看对象内容;
  2. 使用repr(对象)名查看对象内容;
  3. 直接调用“对象.repr()”方法;
  4. 列表以及字典等容器总是会使用 repr 方法,即使使用下节要介绍的“str(对象)”访问方式也不例外

    三、 案例

    1.案例说明

    使用一个自定义类Car的实例对象和一个列表来查看与__repr__相关的调用情况。

    2.案例代码

    1)类Car定义
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

2)实例car定义及查看相关内容(交互模式)

car = Car('雪佛兰','科帕奇','白色',1.8,10)
car
repr(car)
car.__repr__()

3)列表对象的查看

l=[1,2,3,4]
l.__repr__()
repr(l)
l
  1. 案例截图

  2. 案例说明

    从上述案例情况来看,自定义类通过__repr__返回的内容都是一样,都是说明该变量的类型和ID,这些数据不能直接重建具有相同取值的对象。

    列表对象返回的是列表的详细内容,这些数据可以直接重建具有相同取值的对象。

本节老猿详细剖析了类的内置方法 repr(),并结合案例进行了验证,后续章节将介绍与此相关的__str__()方法,并结合案例说明自定义类怎么重写__ repr__()方法。

老猿Python系列文章用于逐步介绍老猿学习Python后总结的学习经验,这些经验有助于没有接触过Python的程序员可以很容易地进入Python的世界。

欢迎大家批评指正,谢谢大家关注!

第8.13节 Python类中内置方法__repr__详解的更多相关文章

  1. 第8.14节 Python类中内置方法__str__详解

    一. object类内置方法__str__和函数str 类的内置方法__str__和内置函数str实际上实现的是同一功能,实际上str调用的就是__str__方法,只是调用方式不同,二者的调用语法如下 ...

  2. 第8.9节 Python类中内置的查看直接父类的__bases__属性

    终于介绍完了__init__方法和__new__方法,接下来轻松一下,本节介绍类中内置的__bases__属性. 一. 语法释义 Python 为所有类都提供了一个 bases 属性,通过该属性可以查 ...

  3. python -- 类中--内置方法

    isinstance 和  issubclass isinstance(obj,b)  检查是否obj是否是类b的对象 class A(object):pass class B(A):pass b=B ...

  4. 第8.18节 Python类中内置析构方法__del__

    一. 引言 基本上所有支持OOP设计的语言都支持析构方法(也称析构函数),析构方法都是在对象生命周期结束时调用,一般用来实施实例相关生命周期内访问数据的扫尾工作,包括关闭文件.释放内存.输出日志.清理 ...

  5. 第8.6节 Python类中的__new__方法深入剖析:调用父类__new__方法参数的困惑

    上节<第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解>通过案例详细分析了两个方法的执行顺序,不知大家是否注意到了,在上述 ...

  6. Python 类的内置方法

    #!/usr/bin/env python # -*- coding:utf-8 -*- # 作者:Presley # 邮箱:1209989516@qq.com # 时间:2018-11-04 # p ...

  7. 第8.5节 Python类中的__new__方法和构造方法__init__关系深入剖析:执行顺序及参数关系案例详解

    上节介绍了__new__()方法这个比构造方法还重要的方法的语法,本节通过案例来详细剖析__new__()方法的细节以及它与构造方法之间的关系. 一.    案例说明 本节以圆Cir类为例来说明,为了 ...

  8. python类的内置方法

    1,__init__(self) 初始化方法,实例化一个对象的时候就会被执行 2,__call__(self,*args) 把实例对象作为函数调用,即实例化一个对象后,在对象后面加括号即可调用__ca ...

  9. 第7.17节 Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析

    第7.17节  Python类中的静态方法装饰器staticmethod 定义的静态方法深入剖析 静态方法也是通过类定义的一种方法,一般将不需要访问类属性但是类需要具有的一些能力可以静态方法提供. 一 ...

随机推荐

  1. 一次打包引发的思考,原来maven还能这么玩?

    持续原创输出,点击上方蓝字关注我 目录 前言 依赖关系 你会怎么做? 必知的几个参数 总结 前言 昨天有一个读者找我的交流工作心得,偶然间提到一个有趣的问题,如下: 「大致的意思」:公司最近在整多模块 ...

  2. sublime中插件

    AllAutocomplete Emmet

  3. 使用Graph API 操作OneDrive 文件 权限 共享

    (Get)列出默认驱动器下(获取items id) /me/drive/root/children 如果想找其他驱动器使用/Drives 列出后可以查看到驱动器下的文件,其中items id就是文件的 ...

  4. DB2添加联合主键

    CREATE TABLE EQUIPMENT_DAILY_CAL( EQU_DATE TIME NOT NULL ,/*日期*/ SEQ_ID INTEGER NOT NULL,/*序号 */ FAU ...

  5. 使用JAVA API读取HDFS的文件数据出现乱码的解决方案

    使用JAVA api读取HDFS文件乱码踩坑 想写一个读取HFDS上的部分文件数据做预览的接口,根据网上的博客实现后,发现有时读取信息会出现乱码,例如读取一个csv时,字符串之间被逗号分割 英文字符串 ...

  6. Java初始化静态变量的时间顺序

    1. 开始吧! 今天,我们来探讨交流下静态变量初始化过程.Java虚拟机在类加载期间也同样遵循这个过程. 2. 初始化过程 在较高的层次上,JVM执行以下步骤: 首先,加载并链接类.然后,这个过程的& ...

  7. 文本多行省略号(CSS最优方案)

    Float定位溢出隐藏 优点: 纯CSS实现,性能好,不用js调优 兼容性高 多行省略,自动显示 缺点: 单词截断 代码如下: <div class="ellipses-div&quo ...

  8. Python_scrapyRedis零散

    1. # Redis 1.解压,配环境变量 2.win上设置自启动 redis-server --service-install D:\redis\redis.windows.conf --logle ...

  9. 利用CSS3实现div页面淡入动画特效

    利用CSS3实现页面淡入动画特效   摘要 利用CSS3动画属性"@keyframes "可实现一些动态特效,具体语法和参数可以网上自行学习.这篇文章主要是实践应用一下这个动画属性 ...

  10. mimikatz使用

    mimikatz使用 需要用管理员权限打开 privilege::debug sekurlsa::logonpasswords 已测试系统 Windows Server 2008 R2 Datacen ...