これを行う簡単な方法があるに違いありませんが、何とか頭を包み込むことができます。私が欲しいものを説明できる最良の方法は、クラスのラムダ関数です。動作するクラスのインスタンス化されていないバージョンを引数として期待するライブラリがあります。次に、作業するクラス自体をインスタンス化します。問題は、クラスのバージョンを動的に作成してライブラリに渡すことができるようにしたいのですが、ライブラリはインスタンス化されていないバージョンを想定しているため、その方法がわかりません。以下のコードは、問題を説明しています。
class Double:
def run(self,x):
return x*2
class Triple:
def run(self,x):
return x*3
class Multiply:
def __init__(self,mult):
self.mult = mult
def run(self,x):
return x*self.mult
class Library:
def __init__(self,c):
self.c = c()
def Op(self,val):
return self.c.run(val)
op1 = Double
op2 = Triple
#op3 = Multiply(5)
lib1 = Library(op1)
lib2 = Library(op2)
#lib3 = Library(op3)
print lib1.Op(2)
print lib2.Op(2)
#print lib3.Op(2)
最初にインスタンス化する必要があり、ライブラリ「AttributeError: Multiply インスタンスには呼び出しメソッドがありません」が壊れるため、汎用の Multiply クラスを使用できません。ライブラリクラスを変更せずに、これを行う方法はありますか?