一个比较优雅的解决方案是在包装类上创建“属性代理”:
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'
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)