__getattr__,__getattribute__和__get__的区别
Posted frank-shen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__getattr__,__getattribute__和__get__的区别相关的知识,希望对你有一定的参考价值。
dir(object) 列出对象的大多数属性
getattr(object, name) 从object对象中获取name字符串指定的属性
hasattr(object, name) 如果object对象中存在指定的属性, 或者能以某种方式通过object 对象获取指定的属性, 返回True
setattr(object, name, value) 把object对象指定属性的值设为value, 可能会创建一个新属性, 或者覆盖现有的属性
getattr(obj, ‘attr‘) 以及obj.attr 和hasattr(obj, ‘attr‘)都会触发__getattribute__(obj, ‘attr‘) 方法, 只有当尝试获取指定的属性失败,搜索过obj, class和超类之后调用__getattr__。
del obj.attr 触发Class.__delattr__(obj, ‘attr‘)方法
dir(obj)触发__dir__(obj)方法
setattr(obj, name, value) 或则通过obj.attr 设置对象属性时会调用__setattr__(self, name, value)
描述符是对多个属性运用相同存取逻辑的一种方式。
描述符是实现了特定协议的类, 这个协议包括__get__, __set__和__delete__方法
以上是关于__getattr__,__getattribute__和__get__的区别的主要内容,如果未能解决你的问题,请参考以下文章
python - getattr 与 getattribute 机制
python中__getattr__和__getattribute__区别
python3中__get__,__getattr__,__getattribute__的区别