青岛IT培训的小编总结,04:动态代理
不, 我肩负IO大臣的重托, 我是来传教的,不能让这老头儿给洗脑了!
吉森想起来了一个大杀器:动态代理,这可是Java的一个非常基础的技术,可以在运行时实现类和方法的增强,比如在调用业务方法的前后加上事务管理,日志管理等功能,没有动态代理,AOP就别想了。
吉森说道:“老先生,Python怎么去实现动态代理啊?”
老头儿微微一笑:“Java Class有个缺点, 一旦被装入Java虚拟机,就没法修改了,想对他做增强,只能修改字节码创建新的类,对老的类做封装,就是代理。但是Python是个动态语言,在运行时就可以修改啊,比如我可以动态地给User类增加一个新的属性,这一点你的Java做不到吧?”
setattr(User,“name”,'andy‘)
print(user.name) #andy
吉森看得目瞪口呆,这真是颠覆了自己从小养成的世界观:一个类在运行期是不能改变的,更不可能去增加什么属性。
老头儿又接着说:“你看看这个User类,和Proxy类,每次调用Login方法的时候,我都可以动态地创建一个新的方法出来,在这个新的方法中,就可以做各种手脚了。”

class User:
def login(self):
print('user login’)
def logout(self):
print(‘user logout’)
class Proxy:
def __init__(self, target):
self.target = target
def __getattribute__(self, name):
target = object.__getattribute__(self, “target”)
attr = object.__getattribute__(target, name)
if name == 'login' :
def newFunc(*args, **kwargs):
print (“login start”)
result = attr(*args, **kwargs)
print( “login end”)
return result
return newFunc
else :
return attr
u = User()
p = Proxy(u)
p.login() #实际上调用的是动态创建的方法
p.logout() #调用的是原来的方法
以上就是青岛IT培训给大家做的内容详解,更多关于UI的学习,请继续关注青岛IT培训