2009-07-24 3 views
1

Ich erstelle dynamisch eine Funktion und weise sie einer Klasse zu. Dies ist ein einfaches/minimal Beispiel dafür, was ich versuche zu erreichen:Wie kann ich gebundene Methoden mit type() erstellen?

in diesem Fehler
def echo(obj): 
    print obj.hello 

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

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

Ergebnisse

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) 

Ich weiß, wenn ich die @staticmethod Dekorateur verwendet, die ich spam in als Parameter übergeben kann Echo, aber das ist für mich in meinem Anwendungsfall nicht möglich.

Wie bekomme ich die echo Funktion, die an Spam gebunden ist, und auf self zuzugreifen? Ist es überhaupt möglich?

Antwort

8

Bisher haben Sie nur eine Klasse erstellt. Sie müssen auch Objekte erstellen, das heißt Instanzen dieser Klasse:

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

Wenn Sie wirklich wollen ein Methode für die Klasse sein, anstatt eine Instanzmethode, wickeln Sie es mit Class (anstelle von static).

Verwandte Themen