pythongetattribute_python getattribute
场景:
python中__get__,__getattr__,__getattribute__的区别
__get__,__getattr__和__getattribute都是访问属性的方法,但不太相同。
object.__getattr__(self, name)
当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常。
object.__getattribute__(self, name)
无条件被调用,通过实例访问属性。如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发AttributeError异常)
object.__get__(self, instance, owner)
如果class定义了它,则这个class就可以称为descriptor。owner是所有者的类,instance是访问descriptor的实例,如果不是通过实例访问,而是通过类访问的话,instance则为None。(descriptor的实例自己访问自己是不会触发__get__,而会触发__call__,只有descriptor作为其它类的属性才有意义。)(所以下文的d是作为C2的一个属性被调用)
class C(object):
a = 'abc'
def __getattribute__(self, *args, **kwargs):
print("__getattribute__() is called")
return object.__getattribute__(self, *args, **kwargs)
# return "haha"
def __getattr__(self, name):
print("__getattr__() is called ")
return name + " from getattr"
def __get__(self, instance, owner):
print("__get__() is called", instance, owner)
return self
def foo(self, x):
print(x)
class C2(object):
d = C()
if __name__ == '__main__':
c = C()
c2 = C2()
print(c.a)
print(c.zzzzzzzz)
c2.d
print(c2.d.a)
输出结果是:
__getattribute__() is called
abc
__getattribute__() is called
__getattr__() is called
zzzzzzzz from getattr
__get__() is called <__main__.c2 object at>
__get__() is called <__main__.c2 object at>
__getattribute__() is called
abc
小结:可以看出,每次通过实例访问属性,都会经过__getattribute__函数。而当属性不存在时,仍然需要访问__getattribute__,不过接着要访问__getattr__。这就好像是一个异常处理函数。
每次访问descriptor(即实现了__get__的类),都会先经过__get__函数。
需要注意的是,当使用类访问不存在的变量是,不会经过__getattr__函数。而descriptor不存在此问题,只是把instance标识为none而已。
pythongetattribute_python getattribute相关推荐
- getparameter java_java中getAttribute与getParameter方法的区别
知识点1:getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为object对象类型 例:re ...
- pageContext.findAttribute()与pageContext.getAttribute()的区别
1.abstract Object findAttribute(String name) 依次在page,request,session(如果有效的话)和application Scope(范围)查找 ...
- getAttribute() 与 attr() 的区别
https://blog.csdn.net/xiphap/article/details/79397060 一直以为 getAttribute() 和 attr() 都是获取元素属性的方法,只是一种是 ...
- echarts Cannot read property ‘getAttribute‘ of null 问题的解决方法
echarts Cannot read property 'getAttribute' of null 问题的解决方法 参考文章: (1)echarts Cannot read property 'g ...
- getAttribute与getParameter区别
当两个Web组件之间为转发关系时,转发源会将要共享 request范围内的数据先用setAttribute将数据放入到HttpServletRequest对象中,然后转发目标通过 getAttribu ...
- request.getParameter和request.getAttribute之间的区别
HttpServletRequest类既有getAttribute()方法,也由getParameter()方法,这两个方法有以下区别: (1)HttpServletRequest类有setAttri ...
- jsp中setAttribute与getAttribute方法使用介绍
jsp中setAttribute与getAttribute方法使用介绍,然后还可以用getAttribute方法来取出. setAttribute.jsp页面源码实例,设置保存当前的日期: <% ...
- JS getAttribute和setAttribute(取得和设置属性)的使用介绍
getAttribute:取得属性: setAttribute:设置属性: 复制代码 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 ...
- request.getAttribute()和 request.getParameter()有何区别?
a.request.getParameter()获取的类型是String:request.getAttribute()获取的类型是Object. b.request.getPrameter()获取的是 ...
- php domdocument getattribute,PHP DOMElement getAttribute()用法及代码示例
DOMElement::getAttribute()函数是PHP中的内置函数,用于获取带有当前节点名称的属性值. 用法: string DOMElement::getAttribute( string ...
最新文章
- 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈
- CSS3文本居中显示、圆形圆角绘制、立体阴影效果设置实例演示
- java前补零工具类_java生成编码工具类,不足补0
- CCIE-LAB-第十二篇-EIGRP+EIGRP末节区域+leak map+分发列表
- charles 安装 ssl_最全面的解决Charles手机抓包的证书问题(步骤非常详细)
- java 串的顺序存储_算法入门之串的顺序存储表示
- 华为软件java笔试_华为软件笔试题4.10
- BZOJ5343 [Ctsc2018]混合果汁 【二分 + 主席树】
- mysql 数据类型 真假_【转】MySQL数据类型
- Google Chrome 最新市场份额
- 如法炮制的意思,成语如法炮制的炮什么意思?
- Linux——系统引导流程学习简单笔记
- 计算机2级怎么插u盘,台式电脑怎么插u盘
- FAT文件系统详解(一)
- scrapy 爬取腾讯招聘网
- 计算机组成原理-存储器的层次结构
- 以QRcode为例聊聊二维码的现状与未来(Java版本)
- 下载文件、根据链接生成二维码
- 卡塔尔世界杯有哪些高科技?-世界杯征文
- 写给女孩:二十岁之后的每一年都很重要