一、__getattr__
class Foo:
def __init__(self, x):
self.x = x
def __getattr__(self, item):
print('执行的是我')
f1 = Foo(10)
print(f1.x)
10
f1.xxxxxx
执行的是我
二、__getattribute__
![103-getattribute-霸道.jpg?x-oss-process=style/watermark](http://www.chenyoude.com/Python%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E6%94%BE%E5%BC%83/103-__getattribute__-%E9%9C%B8%E9%81%93.jpg?x-oss-process=style/watermark)
class Foo:
def __init__(self, x):
self.x = x
def __getattribute__(self, item):
print('不管是否存在,我都会执行')
f1 = Foo(10)
f1.x
不管是否存在,我都会执行
f1.xxxxxx
不管是否存在,我都会执行
三、__getattr__与__getattribute__
- 当__getattribute__与__getattr__同时存在,只会执行__getattrbute__,除非__getattribute__在执行过程中抛出异常AttributeError
__author__ = 'Linhaifeng'
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.x
不管是否存在,我都会执行
执行的是我
f1.xxxxxx
不管是否存在,我都会执行
执行的是我