__getattr__#不存在的属性访问,触发__getattr__
class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print('执行的是我') f1=Foo(10) print(f1.x) f1.xxx 结果: 10 执行的是我
__getattribute__#无论属性存在与否都触发__getattribute__
class Foo: def __init__(self,x): self.x=x print('asdsad') def __getattribute__(self, item): print('不管是否存在,我都会执行') f1=Foo(10) f1.x f1.xxx 结果: asdsad 不管是否存在,我都会执行 不管是否存在,我都会执行
__getattribute__和__getattr__结合
class Foo: def __init__(self,x): self.x=x def __getattr__(self, item): print('执行的是我') def __getattribute__(self, item): print('不管是否存在,我都会执行') raise AttributeError('抛出异常了') f1=Foo(10) f1.xc 结果: 不管是否存在,我都会执行 执行的是我 #当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,除非__getattribute__在执行过程中抛出异常AttributeError