我有一個Python對象,我想屏蔽任何內部和外部訪問,並通過代理運行每個請求。我使用this到目前爲止工作正常的一段代碼。我將它分類並用我想要代理的對象初始化它。Python中的代理變量
不幸的是,它並沒有涵蓋從代理對象內部進行訪問的情況。
class A(object):
def do_something(self):
self.foo.perform_action()
class MyProxy(Proxy):
def __init__(self, obj):
super(MyProxy, self).__init__(obj)
self.proxy_foo = ProxyFoo(obj.foo)
def __getattribute__(self, item):
if item == 'foo':
return self.proxy_foo
return super(MyProxy, self).__getattribute__(item)
a = A()
myproxy = Proxy(a)
# do_something should work on proxy_foo, but it operates on a.foo
myproxy.do_something()
我該怎麼做才能改變這種情況?
您是否爲代理覆蓋__setattr__? – 2015-02-10 04:50:01
沒有。但在我的實際例子中,這個調用更像'self.foo.do_something_else()'。我在'__getattribute__'中有一個斷點,但它在返回'proxy_foo'的條件下從未真正停止過。 – orange 2015-02-10 04:52:16
你的'代理'類是如何定義的? – 2015-02-10 04:56:52