1、__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.xxxxxx
執行的是我
2、__getattribute__
class Foo:
def __init__(self, x):
self.x = x
def __getattribute__(self, item):
print('不論是否存在,我都會執行')
f1 = Foo(10)
f1.x
不論是否存在,我都會執行
f1.xxxxxx
不論是否存在,我都會執行
3、__getattr__與__getattribute__
- 當__getattribute__與__getattr__同時存在,只會執行__getattrbute__,除非__getattribute__在執行過程當中拋出異常AttributeError
#_*_coding:utf-8_*_
__author__ = 'Linhaifeng'
class Foo:
def __init__(self, x):
self.x = x
def __getattr__(self, item):
print('執行的是我')
# return self.__dict__[item]
def __getattribute__(self, item):
print('不論是否存在,我都會執行')
raise AttributeError('哈哈')
f1 = Foo(10)
f1.x
不論是否存在,我都會執行
執行的是我
f1.xxxxxx
不論是否存在,我都會執行
執行的是我