2009-07-24 15 views
1

私は動的に関数を生成し、それをクラスに割り当てます。これは私が達成しようとしているかの簡単な/最小限の例です。このエラーでtype()でバインドされたメソッドを作成するにはどうすればよいですか?

def echo(obj): 
    print obj.hello 

class Foo(object): 
    hello = "Hello World" 

spam = type("Spam", (Foo,), {"echo":echo}) 
spam.echo() 

結果を

Traceback (most recent call last): 
File "<input>", line 1, in <module> 
TypeError: unbound method echo() must be called with Spam instance 
    as first argument (got nothing instead) 

私はパラメータとしてでspamを渡すことができ@staticmethodデコレータを使用する場合、私は知っていますエコーすることはできますが、それは私にとっては不可能です。

echo関数をSpamにバインドし、アクセスをselfにするにはどうすればよいですか?まったく可能ですか?

答えて

8

これまでのところ、クラスを作成しただけです。あなたも、そのクラスの、すなわちインスタンス、オブジェクトを作成する必要があります。

Spam = type("Spam", (Foo,), {"echo":echo}) 
spam = Spam() 
spam.echo() 

あなたは本当にこれがクラスのメソッドではなく、インスタンスメソッドになりたい場合は、(代わりにstaticmethodの)クラスメソッドでそれを包みます。

関連する問題