2009-07-24 3 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) 

Я знаю, что если я использовал @staticmethod декоратора, что я могу передать spam в качестве параметра эхо, но это невозможно для меня в моем случае использования.

Как я могу получить функцию echo для связи с Spam и получить доступ self? Это вообще возможно?

ответ

8

До сих пор вы только создали класс. Кроме того, необходимо создавать объекты, то есть экземпляры этого класса:

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

Если вы действительно хотите, чтобы это метод в классе, а не метод экземпляра, оберните его classmethod (вместо STATICMETHOD).

Смежные вопросы