initと
call`のメソッドの違いを知りたいです。
例えば、以下のようなものです。
class test:
def __init__(self):
self.a = 10
def __call__(self):
b = 20
最初のものは、新しく作成されたオブジェクトを初期化するために使用され、そのために使用される引数を受け取ります。
class Foo:
def __init__(self, a, b, c):
# ...
x = Foo(1, 2, 3) # __init__
2つ目は関数呼び出し演算子を実装しています。
class Foo:
def __call__(self, a, b, c):
# ...
x = Foo()
x(1, 2, 3) # __call__
メタクラスでカスタムの__call__()
メソッドを定義すると、クラス'のインスタンスを関数として呼び出すことができ、常にインスタンス自体を変更するわけではありません。
In [1]: class A:
...: def __init__(self):
...: print "init"
...:
...: def __call__(self):
...: print "call"
...:
...:
In [2]: a = A()
init
In [3]: a()
call