なぜ次のことが起こるのか理解できません。関数がメソッドであるかどうかをチェックする以外は何もしないデコレータを使用しています。私はPythonのメソッドが何であるかを理解していると思っていましたが、明らかにそうではありません:
import inspect
def deco(f):
def g(*args):
print inspect.ismethod(f)
return f(*args)
return g
class Adder:
@deco
def __call__(self, a):
return a + 1
class Adder2:
def __call__(self, a):
return a + 2
Adder2.__call__ = deco(Adder2.__call__)
ここで、次を実行します。
>>> a = Adder()
>>> a(1)
False
2
>>> a2 = Adder2()
>>> a2(1)
True
3
このコードで True が 2 回出力されることを期待します。
では、Adder2 のように関数を手動で装飾することは、@deco 関数を介して装飾することとまったく同じではありませんか?
誰かがとても喜んで、なぜこれが起こるのか説明できますか?