クラスを作るときに、__init__は頻繁に使うけど、__call__って何ってなったときに自分なりに解釈
環境はPython 3.5.1 :: Anaconda 2.5.0 (x86_64)
実行は、Jupyter notebookにて
__call__
は関数っぽく呼び出したら発動
クラス例
class_sample.py
class A:
def __init__(self, a):
self.a = a
print("A init")
def __call__(self, b):
print("A call")
print(b + self.a)
class B(A):
def __init__(self, a, c):
super().__init__(a)
self.c = c
print("B init")
def __call__(self, d):
print("B call")
print(self.a + self.c + d)
実行例
>>> a = A(1)
A init
>>> a(2)
A call
3
>>> b = B(1,3)
A init
B init
>>> b(4)
B call
8
インスタンス生成では__init__
しか呼び出されない。しかし、一度生成されたインスタンスを関数っぽく引数を与えて呼び出せば、__call__
が呼び出されるという仕組み
もちろん、__call__
に返り値をつければ,インスタンスから得られた値を別の変数に使ったりもできるということ。