2013-08-13 14 views
5

şimdiye kadarPython'da bir yöntem nesnesinin __call__ yöntemini nasıl geçersiz kılarım? İşte

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 

ile çalışıyorum ben arzu çıkışı sağlayacak şekilde başka bir şekilde ilgilenmiyorum şeydir. Daha ziyade, eğitim amaçlı olarak, yaptığım gibi, __call__'u neden geçersiz kıldığımı bilmek istiyorum.

+2

@SethMMorton: Sahip olduklarını görmek için dir (f) 'i çalıştırmayı deneyin. – Tadeck

+2

İlgili: http://stackoverflow.com/questions/9707600/python-functions-and-their-call-attribute – Jared

cevap

4

Bu call_function yılında, ceval.c içinde fonksiyon tiplerinin özel muhafazaya bağlı olduğu görülmektedir:

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

bu normal fonksiyonlarını çağırarak ve __call__ niteliğini görmezden beri verimlilik için muhtemelen olduğunu tahmin ediyorum , yapılan en yaygın çağrı türüdür.

+0

Şimdi ht.python.org adresine giden bağlantıyı değiştirdim çünkü bu şu anda CPython resmi resmi deposudur . – unutbu

İlgili konular