python __get__方法详解
时间:2020-07-12
本文章向大家介绍python __get__方法详解,主要包括python __get__方法详解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
上一段简短的代码
class TestMain: def __init__(self): print('TestMain:__init__') self.a = 1 def __getattr__(self, item): print('TestMain:__getattr__') return 2 def __getattribute__(self, item): print('TestMain:__getattribute__') if item == 'c': raise AttributeError return 3 if __name__ == '__main__': t = TestMain() print(t.a) print(t.b) print(t.c)
我们知道只要定义了__getattribute__
函数,就肯定执行这个函数来获取属性,这次我们增加了判断如果访问c
这个属性,我们抛出异常,最后的结果是:
TestMain:__init__ TestMain:__getattribute__ 3 TestMain:__getattribute__ 3 TestMain:__getattribute__ TestMain:__getattr__ 2
也就是说,如果__getattribute__
抛出了AttributeError
异常,那么会继续访问__getattr__
函数的。
总结: 1.如果定义了__getattribute__,那么无论访问什么属性,都是通过这个函数获取,包括方法,t.f()这种也是访问的这个函数,此时这个函数应该放回一个方法,如果像例子中,仍然返回一个数字,你会获得一个TypeError: 'int' object is not callable错误 2.只要定义了__getattribute__方法,不管你访问一个存在的还是不存在的属性,都由这个方法返回,比如访问t.a,虽然a存在,但是只要定义了这个访问,那么就不是访问最开始的a了 3.如果__getattribute__抛出了AttributeError异常,并且定了了__getattr__函数,那么会调用__getattr__这个函数,不论这个属性到底是不是存在 4.也就是说属性访问的一个大致优先级是:__getattribute__ > __getattr__ > __dict__
转自:https://www.cnblogs.com/andy1031/p/10923834.html,写的很详细
原文地址:https://www.cnblogs.com/weisunblog/p/13287039.html
- 三位数的排列组合
- Undefined symbols for architecture i386:"_OBJC_CLASS_$_xx", referenced from: 解决方法
- Xcode5.0使用iOS6.1SDK及模拟器
- 内存泄露
- 深入理解及应用Position
- 数字营销人的年终奖该如何翻倍?这里有5个秘籍
- 处理日期时间NSDate
- 云安全(第1部分):从何开始
- ios 开发,通讯录信息调用常用方法,这个比较全,不用再整理了
- 深入理解和应用Float属性
- 堆和栈的区别
- 深入理解和应用display属性(二)
- Philip S.Yu 讲的广度学习到底是什么?
- Kubernetes服务网格(第10部分):服务网格API
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 这是什么沙雕题目?测试用例居然有人身高为 0 ??
- 深入解读flink sql cdc的使用以及源码分析
- markdown mermaid 画图
- 面试汇总(五):操作系统常见面试总结(一):进程与线程的相关知识点
- 面试汇总(六):操作系统常见面试总结(二):系统相关的问题
- Android 利用V4L2 调用camera
- Android基础--利用ANativeWindow显示视频
- Python如何爬取b站热门视频并导入Excel
- 代码详解——改变控制器的参考速度
- Python爬虫之JS的解析
- Python爬虫之chrome在爬虫中的使用
- Python爬虫之打码平台的使用
- Python爬虫---爬取腾讯动漫全站漫画
- Python爬虫之数据提取-selenium的其它使用方法
- Python爬虫之数据提取-selenium定位获取标签对象并提取数据