__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