class F(object):
def __init__(self):
self.name = 'A'
def __getattr__(self, item):
if item == 'age':
return 40
elif item == 'haha':
return 'good'
else:
raise AttributeError('没有这个属性')
def __getattribute__(self, item):
print('获取属性,方法', item)
return object.__getattribute__(self, item)
f = F()
print(f.age)
print(f.haha)
获取属性,方法 age <<<<
40 <<<<
获取属性,方法 haha
good
此处魔法方法是__getattribute__(self, item)和__getattr__(self, item):
getattribute (print(ob.name) -- obj.func())当访问对象的属性或者是方法的时候触发
getattr 拦截运算(obj.xx),对没有定义的属性名和实例,会用属性名作为字符串调用这个方法