第8.25节 Python风格的__getattribute__属性访问方法语法释义及使用
一、 引言
在《第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__属性访问方法语法释义及使用的更多相关文章
- 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?
第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一. 案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...
- 第7.27节 Python案例详解: @property装饰器定义属性访问方法getter、setter、deleter
上节详细介绍了利用@property装饰器定义属性的语法,本节通过具体案例来进一步说明. 一. 案例说明 本节的案例是定义Rectangle(长方形)类,为了说明问题,除构造函数外,其他方法都只 ...
- 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解
第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一. 引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...
- PyQt(Python+Qt)学习随笔:QTreeWidget中标题相关属性访问方法headerItem、setHeaderLabels
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 树型部件窗口可以有一个标题头,其中包含部件中每个列的节(即标题).QTreeWidget的标题属性包 ...
- python 给对象绑定属性和方法和__slots__的使用
# 以c语言为主是静态语言,运行之前先编译,在运行的过程中不允许编辑代码# 在运行的过程中,可以改变,可以添加属性,就是属于动态语言(python) # python动态的添加属性以及方法class ...
- python 类的私有属性和方法 (转载)
转载:http://www.runoob.com/python/python-object.html 类属性与方法 类的私有属性 __private_attrs:两个下划线开头,声明该属性为私有,不能 ...
- Python使用property函数定义属性访问方法如果不定义fget会怎么样?
我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...
- Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析
Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...
- PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 老猿将QTableWidget表格部件中反映部件当前情况的一些方法归类为部件状态访问方法,包括部件的 ...
随机推荐
- 基于YOLO-V2的行人检测(自训练)附pytorch安装方法
声明:本文是别人发表在github上的项目,并非个人原创,因为那个项目直接下载后出现了一些版本不兼容的问题,故写此文帮助解决.(本人争取在今年有空的时间,自己实现基于YOLO-V4的行人检测) 项目链 ...
- .NetMvc从http或本地下载pdf文件
1.帮助类 1 public static class PdfHelper 2 { 3 #region 从http链接下载 4 public static void Download(string u ...
- 如何测量Ceph OSD内存占用
前言 这个工具我第一次看到是在填坑群里面看到,是由研发-北京-蓝星同学分享的,看到比较有趣,就写一篇相关的记录下用法 火焰图里面也可以定位内存方面的问题,那个是通过一段时间的统计,以一个汇总的方式来查 ...
- Ceph部署的时候修改默认权重
前言 部署集群的时候权重是默认生成的,这个是根据磁盘大小分配的,我们有的时候需要去修改一下这个默认权重 修改 如果统一的初始值,那么直接添加参数即可 osd_crush_initial_weight ...
- 重置ubuntu13.04 密码
方法如下: Restart Machine HOLD Shift Button ( You will get message "GRUB Loading") Select the ...
- 我的开源经历:为了方便处理三方 HTTP 接口而写的 Java 框架
缘起 我以前公司需要在 Java 后台调用许多第三方 HTTP 接口,比如微信支付.友盟等等第三方平台. 公司内部还有很多服务是用世界最好语言写的,接口自然也只能通过 HTTP 接口来调用.于是日积月 ...
- 原生sql查询返回结果集处理方法
今天博主用原生写查询的时候发现,查询出来的居然不是我数据表里的数据,而是一个对象 object(mysqli_result)#2 (5) { ["current_field"]=& ...
- PHP 使用gd库给图片加图片水印,文字水印,并返回路径
//图片水印 $mark_filename = './02.jpg'; //获取图片信息 $info = getimagesize($mark_filename); //获取图片的后缀 $type = ...
- 深度分析:Java虚拟机类加载机制、过程与类加载器
虚拟机类加载机制是把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型. 需要注意的是 Java 语言与其他编译时需要进 ...
- java开发两年,连Spring中bean的装配都不知道?你怎么涨薪啊
Spring 1.1.1.1 创建一个bean package com.zt.spring; public class MyBean { private String userName; privat ...