Quero saber a diferença entre os métodos __init__
e __call__
.
Por exemplo:
class test:
def __init__(self):
self.a = 10
def __call__(self):
b = 20
O primeiro é utilizado para rubricar objectos recém-criados, e recebe argumentos utilizados para o fazer:
class Foo:
def __init__(self, a, b, c):
# ...
x = Foo(1, 2, 3) # __init__
O segundo operador da função de chamada de funções de implementos.
class Foo:
def __call__(self, a, b, c):
# ...
x = Foo()
x(1, 2, 3) # __call__
A definição de um método personalizado __call__()
na meta-classe permite que a instância da classe's seja chamada como uma função, nem sempre modificando a própria instância.
In [1]: class A:
...: def __init__(self):
...: print "init"
...:
...: def __call__(self):
...: print "call"
...:
...:
In [2]: a = A()
init
In [3]: a()
call