一、 引言

在《第8.13节 Python类中内置方法__repr__详解》老猿介绍了在命令行方式直接输入“对象”就可以调用repr内置函数或__repr__方法查看对象属性数据,实际上该过程除了调用repr内置函数或__repr__方法外,还调用了一个内置方法__getattribute__,正是通过该方法Python获取了对象的信息进行输出。

二、 __getattribute__语法释义

__getattribute__方法是一个实例方法,object基类中定义了该方法,任何属性调用该方法都能返回属性(包括方法)对应的数据,实际上在Python交互式环境命令行中输入对象直接回车返回信息,实际上就是调用该方法获取到repr方法返回的信息展示的。

调用语法:

实例.getattr( 属性名)

其中self表示实例自身,“属性名”是属性的名字,为字符串定义的属性名字。

三、 案例代码及截屏

>>> class Car(Vehicle):
def __init__(self, power):
print("In Car init,objectid = {:#016X}".format(id(self)))
self.power = power
self.totaldistance = 0
def drive(self,distance):self.totaldistance += distance >>> car = Car('汽油发动机')
In Car init,objectid = 0X000000038B1128
>>> car.__getattribute__('power')
'汽油发动机'
>>> car.__getattribute__('drive')
<bound method Car.drive of <__main__.Car object at 0x00000000038B1128>>
>>> car.power
'汽油发动机'
>>> car.drive
<bound method Car.drive of <__main__.Car object at 0x00000000038B1128>>
>>>

可以看到,“实例.getattr( 属性名)”与“实例.属性”的执行结果完全相同,实际上这种“实例.属性”的查看模式调用的就是“实例.getattr( 属性名)”名来实现的。

本节简单介绍了__ getattribute __方法,内容比较简单,但确实该方法是非常符合Python风格的,每种简单后面都有对应的支撑机制。下节将继续介绍怎么实现该方法的重写以支持开发人员自己的访问控制。

老猿Python,跟老猿学Python!

博客地址:https://blog.csdn.net/LaoYuanPython


请大家多多支持,点赞、评论和加关注!谢谢!

第8.25节 Python风格的__getattribute__属性访问方法语法释义及使用的更多相关文章

  1. 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?

    第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一.    案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...

  2. 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter

    上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一.    案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...

  3. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  4. PyQt(Python+Qt)学习随笔:QTreeWidget中标题相关属性访问方法headerItem、setHeaderLabels

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件窗口可以有一个标题头,其中包含部件中每个列的节(即标题).QTreeWidget的标题属性包 ...

  5. python 给对象绑定属性和方法和__slots__的使用

    # 以c语言为主是静态语言,运行之前先编译,在运行的过程中不允许编辑代码# 在运行的过程中,可以改变,可以添加属性,就是属于动态语言(python) # python动态的添加属性以及方法class ...

  6. python 类的私有属性和方法 (转载)

    转载:http://www.runoob.com/python/python-object.html 类属性与方法 类的私有属性 __private_attrs:两个下划线开头,声明该属性为私有,不能 ...

  7. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  8. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  9. PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 老猿将QTableWidget表格部件中反映部件当前情况的一些方法归类为部件状态访问方法,包括部件的 ...

随机推荐

  1. Sublime Text 3 安装插件与快捷键总结

    ublime Text 3 是一个了不起的软件.首先,它是一个干净,实用,可以快速的编写代码编辑器.它不仅具有令人难以置信的内置功能(多行编辑和VIM模式),而且还支持插件,代码片段和其他许多东西.很 ...

  2. windows鼠标右键文件太多

    1.网上找的(已经验证太难找,并没有多大用) 单击Windows的"开始"菜单,单击"运行",在"打开"框中键入"regedit& ...

  3. Pandas_VBA_数据清洗对比

    VBA处理数据与Python Pandas处理数据案例比较 Author : Collin_PXY 需求: 现有一个 csv文件,包含'CNUM'和'COMPANY'两列,数据里包含空行,且有内容重复 ...

  4. rabbitmq-参考

    rabbitMQ http://lynnkong.iteye.com/blog/1699684 http://jzhihui.iteye.com/category/195005

  5. 4. Spark在集群上运行

    *以下内容由<Spark快速大数据分析>整理所得. 读书笔记的第四部分是讲的是Spark在集群上运行的知识点. 一.Spark应用组件介绍 二.Spark在集群运行过程 三.Spark配置 ...

  6. UNP——第五章,TCP客户/服务程序

    tcpser void str_echo(int sockfd) { long arg1, arg2; ssize_t n; char line[MAXLINE]; for ( ; ; ) { if ...

  7. DB2 建表,添加字段,删除字段,修改字段等常用操作

    转载:http://blog.sina.com.cn/s/blog_67aaf4440100v01p.html,稍作修改. --创建数据库 create database Etp; --连接数据库 c ...

  8. linux笔记【简版】

    1.linux简介 kernel 内核 shell 外壳 (类似win上的cmd) sh,Bash:#root,$user csh:#root,%user filesystem 文件管理系统 2.优势 ...

  9. 划分问题(Java 动态规划)

    Description 给定一个正整数的集合A={a1,a2,-.,an},是否可以将其分割成两个子集合,使两个子集合的数加起来的和相等.例A = { 1, 3, 8, 4, 10} 可以分割:{1, ...

  10. impala语句

    0.保留两位小数 round(字段a, 需要保留几位小数) round( data, 4) 1. case wen case when 字段a = '01' and 字段b = '01' and 字段 ...