__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__区别

__getattribute__

python3中__get__,__getattr__,__getattribute__的区别

python中__get__,__getattr__,__getattribute__的区别

`__getattribute__` 和 `__getattr__` 中的错误处理