首页 / PYTHON / Python中的代理对象
Python中的代理对象
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python中的代理对象,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1187字,纯文字阅读大概需要2分钟。
内容图文
![Python中的代理对象](/upload/InfoBanner/zyjiaocheng/759/2226c64be15542fbab98816fb659868f.jpg)
我正在寻找方法将方法调用从对象(包装器)传递到对象的成员变量(wrappee).可能有许多方法需要外部化,因此在向wrapee添加方法时,如果不更改包装器的接口,这样做是有帮助的.
class Wrapper(object)
def __init__(self, wrappee):
self.wrappee = wrappee
def foo(self):
return 42
class Wrappee(object):
def bar(self):
return 12
o2 = Wrappee()
o1 = Wrapper(o2)
o1.foo() # -> 42
o1.bar() # -> 12
o1.<any new function in Wrappee>() # call directed to this new function
如果这个呼叫重定向是“快速”(相对于直接呼叫,即不增加太多开销),那将是很好的.
解决方法:
一个稍微优雅的解决方案是在包装类上创建一个“属性代理”:
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()
所有的魔法都发生在Wrapper类的__getattr__方法上,它将尝试访问Wrapper实例上的方法或属性,如果它不存在,它将尝试包装它.
如果您尝试访问任一类上不存在的属性,您将得到:
o2.not_valid
Traceback (most recent call last):
File "so.py", line 26, in <module>
o2.not_valid
File "so.py", line 15, in __getattr__
raise e
AttributeError: 'Wrappee' object has no attribute 'not_valid'
内容总结
以上是互联网集市为您收集整理的Python中的代理对象全部内容,希望文章能够帮你解决Python中的代理对象所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。