2011-02-07 4 views
2

메소드가 선언 된 클래스에 대한 참조를 얻으려면 어떻게해야합니까? 아래 코드에서 에 대한 참조를 test에 가져 오려고합니다.파이썬에서, 메소드가 선언 된 클래스를 어떻게 결정할 수 있습니까?

class Classical: 
    def method(): 
     pass 

def test(func): 
    # How can I get a reference to 'Classical' using only 'func'? 
    pass 

test(Classical.method) 

나는 dir()을 사용해 보았으며 아무 소용이 없다. 어떤 아이디어? (문제가 있다면 Python 3.1을 실행 중입니다.)

EDIT : 코드가 더 이해되도록 변경되었습니다.

답변

2

이 클래스가 생성되는 동안 test() 함수는 Classical 클래스의 컨텍스트에서 실행됩니다. 클래스 본문에서 코드를 실행하는 동안 클래스가 아직 존재하지 않으므로 액세스 할 수 없습니다. 이 문제를 해결하려면 함수 데코레이터 대신 class decorator을 사용해야합니다.

또는 실제로 달성하고자하는 것을 알려줄 수 있습니다. 아마도 간단한 해결책이있을 것입니다.

편집는 : 편집 한 질문에 대답하려면 : 언 바운드 방법, 당신은 CPython의 2.x 또는 3.0에 unbound_method.im_class을 사용할 수 있습니다 속한 클래스에 액세스하려면 이것이 다른 파이썬 구현에 이식 가능한지 여부는 알 수 없으며, 달성하고자하는 것은 무엇이든 달성하기위한 더 좋은 방법이있을 것입니다.

+0

클래스 및 메서드를 만든 후에 클래스를 확인하는 방법이 있습니까? 예를 들어, 클래스 본문 뒤에'test (Classical.method)'를 호출하면? – zildjohn01

+0

@ zildjohn01 : CPython에서 언 바운드 메서드의 클래스에 액세스하려면'func.im_class'를 사용할 수 있지만 이것을 사용하지 말 것을 권장합니다. 아마도 문제에 대한 더 나은 해결책이있을 것입니다. 그리고 우리가 당신에게 무엇을 성취하려고하는지 말하면 우리는 당신에게 말할 수 있습니다. –

+0

@zildjohn : 다시, 열심히. 'dir (Classical.method) '의 모습에서 전혀 불가능합니다. Python 3에 대해서는 http://stackoverflow.com/questions/4707288/get-functions-namespace-path – delnan