__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__方法

原文地址:https://www.cnblogs.com/frank-shen/p/10294701.html

时间: 2024-07-31 06:36:00

__getattr__,__getattribute__和__get__的区别的相关文章

转载Python中__getattr__ __getattribute__ __get__解释

来源:http://www.myexception.cn/perl-python/620096.html python中__get__,__getattr__,__getattribute__的区别 __get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常. object.__get

python中getattr(),__getattr__(),__getattribute__()探究

getattr() 为 函数,而__getattr__(), __getattribute__()为类的方法 1. getattr() 参数为 (object,attr_name,default value) 会调用该object的__getattribute__()方法,如果没有返回值,继续调用__getattr__()方法 2. 任何调用实例的属性值,都会调用到__getattribute__方法,如果没有返回值会继续调用__getattr__(),也就是__getattr__() 相当于e

python3中__get__,__getattr__,__getattribute__的区别

__get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常. object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发Attrib

python中__get__,__getattr__,__getattribute__的区别

__get__,__getattr__和__getattribute都是访问属性的方法,但不太相同. object.__getattr__(self, name) 当一般位置找不到attribute的时候,会调用getattr,返回一个值或AttributeError异常. object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__getattr__()不会被调用(除非显示调用或引发Attrib

__get__,__getattr__,__getattribute__的区别

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__()

Python-类属性查询协议-__getattr__ __getattribute__

__getattr__ 查找不到类属性的时候调用 class BeiMenChuiXue: def __init__(self, name): self.name = name def __getattr__(self, item): print("%s not find", item) raise Exception("实例方法没有找到") if __name__ == '__main__': bei_men_chui_xue = BeiMenChuiXue(&q

__getattribute__

目录 __getattr__ __getattribute__ __getattr__与__getattribute__ __getattr__ 不存在的属性访问,触发__getattr__ class Foo: def __init__(self, x): self.x = x def __getattr__(self, item): print('执行的是我') # return self.__dict__[item] f1 = Foo(10) print(f1.x) 10 f1.xxxxx

python属性查找(attribute lookup)

在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribute lookup的问题.而get系列函数(__get__, __getattr__, __getattribute__) 也很容易搞晕,本文就这些问题简单总结一下. 首先,我们知道: python中一切都是对象,"everything is object",包括类,类的实例,数字,模块

python属性查找 深入理解(attribute lookup)

在Python中,属性查找(attribute lookup)是比较复杂的,特别是涉及到描述符descriptor的时候. 在上一文章末尾,给出了一段代码,就涉及到descriptor与attribute lookup的问题.而get系列函数(__get__, __getattr__, __getattribute__) 也很容易搞晕,本文就这些问题简单总结一下. 首先,我们知道: python中一切都是对象,"everything is object",包括类,类的实例,数字,模块