Python中的代理对象

Python中的代理对象,第1张

Python中的代理对象

一个比较优雅的解决方案是在包装类上创建“属性代理”:

class Wrapper(object):    def __init__(self, wrappee):        self.wrappee = wrappee    def foo(self):        print 'foo'    def __getattr__(self, attr):        return getattr(self.wrappee, attr)class Wrappee(object):    def bar(self):        print 'bar'o2 = Wrappee()o1 = Wrapper(o2)o1.foo()o1.bar()

所有的魔术都发生在类的

__getattr__
方法上,该方法
Wrapper
尝试访问
Wrapper
实例上的方法或属性,如果不存在,则将尝试包装的方法或属性。

如果您尝试访问两个类都不存在的属性,则会得到以下信息:

o2.not_validTraceback (most recent call last):  File "so.py", line 26, in <module>    o2.not_valid  File "so.py", line 15, in __getattr__    raise eAttributeError: 'Wrappee' object has no attribute 'not_valid'


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5647147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存