ここに私がこれまでに取り組んでいるものがあります
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__
むしろ、教育目的で、私が行ったように をオーバーライドしても、期待どおりに機能しない理由を知りたいです。
ここに私がこれまでに取り組んでいるものがあります
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__
むしろ、教育目的で、私が行ったように をオーバーライドしても、期待どおりに機能しない理由を知りたいです。
これは、 ceval.cの関数型の特別なケースによるものと思われますcall_function
。
if (PyFunction_Check(func))
x = fast_function(func, pp_stack, n, na, nk);
else
x = do_call(func, pp_stack, na, nk);
通常の関数を呼び出し、属性を無視する__call__
ことは、行われる最も一般的な種類の呼び出しであるため、これはおそらく効率のためだと思います。