Python:__getattr__ 和 __getattribute__ 方法

__getattr__

__getattr__方法的自动执行,需要满足两个条件:一是通过实例访问属性;二是触发了AttributeError异常(属性不存在)。

Python:__getattr__ 和 __getattribute__ 方法

 Python:__getattr__ 和 __getattribute__ 方法

 上图中,调用不存在的job属性,会首先调用__getattribute__方法,触发AttributeError异常并自动捕获,然后才调用__getattr__方法。

  __getattribute__

该方法可以拦截对对象属性的所有访问企图,当属性被访问时,自动调用该方法(只适用于新式类)。

Python:__getattr__ 和 __getattribute__ 方法

 Python:__getattr__ 和 __getattribute__ 方法

通过上图中的代码示例可以看出,一旦实现了__getattribute__方法,所有通过对象访问的属性(包括类属性)都会被拦截,而直接通过类访问类属性则不会。

调用父类的方法super().__getattribute__(item),实现:
1)通过对象访问属性时,可以正常返回值;
2)当调用的属性不存在时,会抛出异常AttributeError,并调用__getattr__方法;
上一篇:__setattr__和__delattr__和__getattr__


下一篇:9.一套简单的全局错误处理框架,工作中直接拿来可用