0
別のクラスのProxyクラスを作成しようとしています。このクラスをそのコンストラクタのプロキシに渡してから、プロキシがこのクラスのすべての同じメソッドを動的に作成するようにします。Pythonプロキシクラス
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
だと思いますが、確認していないものに:
これは働いていないしている私は、これまでhvae何ですか?
私はPythonの初心者です。これを行うには全く別のPythonの方法があれば、私もそれについて聞いて嬉しいです。
「動作していない」とは言いませんでした。なぜあなたはディクテーションの割り当てを変更する必要があると思いますか?それにもかかわらず、これは奇妙なアプローチです。 '__getattr__'をオーバーライドするだけで呼び出しを委譲したくない理由はありますか? –
現在のエラーはproxyClass.func1()を呼び出すときです。関数がインスタンスに適切に配置されていないことを示す1つの引数をとる必要があると言います。 – user2802557
プロキシパターンを使用するという全体の前提は、 /限界ect。元のクラスとのやりとりができます。メンバーをコピーするだけの理由が不思議です。プロキシコンストラクタにクラスを渡してselfsjectのようなものに割り当てるのではなく、プロキシで1:1のプロパティとメンバアクセスが必要な場合でも、 –