0
我试图创建一个代理类到另一个类。我希望这个类在其构造函数中被传递到代理中,然后让代理动态地为它自己创建这个类的所有方法。Python代理类
这是我hvae到目前为止,这是行不通的:
import inspect
from optparse import OptionParser
class MyClass:
def func1(self):
print 'MyClass.func1'
def func2(self):
print 'MyClass.func1'
class ProxyClass:
def __init__(self):
myClass = MyClass()
members = inspect.getmembers(MyClass, predicate=inspect.ismethod)
for member in members:
funcName = member[0]
def fn(self):
print 'ProxyClass.' + funcName
return myClass[funcName]()
self.__dict__[funcName] = fn
proxyClass = ProxyClass()
proxyClass.func1()
proxyClass.func2()
我认为这是一个需要改变线路self.__dict__[funcName] = fn
但我不知道什么?
我是新来的Python,所以如果有一个完全不同的Pythonic这样做的方式,我也很乐意听到这一点。
你还没有说过它是如何“不工作”。你为什么认为字典的任务需要改变?不过,这是一个奇怪的方法。是否有任何理由不想通过重写'__getattr__'来完成委托调用? –
当前错误是当我调用proxyClass.func1()我说它需要采取1参数,这表明该函数没有正确放在实例 – user2802557
使用代理模式的整个前提是创建一个类,简化/限制等。与原始类的交互,所以只是想知道为什么你试图复制成员。即使你需要1:1属性和成员访问代理,为什么不只是传递你的类到代理构造函数,并将它分配给像self.subject这样的东西? –