知识点:
1.什么时拦截器:当对象访问属性或者方法时 首先调用 __getattribute__
2.拦截器的应用:如果有哪个用户调用了该属性或者方法 可以存入log 日志中
3.拦截器拦截属性
4.拦截器拦截方法
5.禁止在__getattribute__方法中出现self.xxx
拦截器拦截属性
class Ircast(object):
def __init__(self,subject1):
self.subject1 = subject1
self.subject2 = "cpp"
#属性访问时拦截器,打印log
#禁止再使用self.xxx
def __getattribute__(self,obj):
#obj为对象的属性名
print("%s"%obj)
if obj == "subject1":
print("log subject1")
return "redrect python"
else:
#返回原有属性的value
temp = object.__getattribute__(self,obj)
print("%s"%str(temp))
return temp
def show(self):
print("haha")
t = Ircast('subject')
print(t.subject2)
拦截器拦截方法
class Ircast(object):
def __init__(self,subject1):
self.subject1 = subject1
self.subject2 = "cpp"
#属性访问时拦截器,打印log
#禁止再使用self.xxx
def __getattribute__(self,obj):
#obj为对象的属性名
print("%s"%obj)
if obj == "subject1":
print("log subject1")
return "redrect python"
else:
#返回原有属性的value
temp = object.__getattribute__(self,obj)
print("%s"%str(temp))
return temp
def show(self):
print("haha")
t = Ircast('subject')
t.show()