2013-08-13 2 views
5

는 지금까지파이썬에서 메서드 개체의 __call__ 메서드를 재정의하려면 어떻게해야합니까? 여기

def f(n): 
    return n 

f.__call__ = lambda n: n + 1 

print f(2) #I expect an output of 3 but get an output of 2 

함께 일하고 내가 원하는 출력을 달성하기 위해 다른 방법에 관심이 아니다 것입니다. 오히려 교육 목적으로, 제가 한 것처럼 __call__을 무시하는 것이 왜 기대했던대로 작동하지 않는지 알고 싶습니다.

+2

@SethMMorton :'dir (f)'를 실행하여 이들이 있는지 확인하십시오. – Tadeck

+2

관련 : http://stackoverflow.com/questions/9707600/python-functions-the-the-call-attribute – Jared

답변

4

call_function에, ceval.c에서 기능 유형의 특수 케이스로 인한 것으로 보인다 :

if (PyFunction_Check(func)) 
    x = fast_function(func, pp_stack, n, na, nk); 
else 
    x = do_call(func, pp_stack, na, nk); 

나는이 정기적으로 함수를 호출하고, __call__ 속성을 무시하기 때문에, 효율성을 위해 아마 추측 것 , 지금까지 이루어지고있는 가장 일반적인 호출입니다.

+0

CPython의 공식 저장소이므로 hg.python.org를 가리 키도록 링크를 변경했습니다. . – unutbu

관련 문제