2009-07-24 4 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

지금까지는 클래스 만 만들었습니다. 당신이 정말로이 클래스의 메소드가 아닌 인스턴스 메서드 일 (대신 StaticMethod를의) classmethod으로 포장하려는 경우

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

: 당신은 또한 그 클래스의 즉 인스턴스 객체를 생성해야합니다.

관련 문제