Ich möchte den Unterschied zwischen __init__
und __call__
Methoden kennen.
Zum Beispiel:
class test:
def __init__(self):
self.a = 10
def __call__(self):
b = 20
Der erste wird verwendet, um ein neu erstelltes Objekt zu initialisieren, und empfängt die dafür verwendeten Argumente:
class Foo:
def __init__(self, a, b, c):
# ...
x = Foo(1, 2, 3) # __init__
Der zweite implementiert den Funktionsaufruf-Operator.
class Foo:
def __call__(self, a, b, c):
# ...
x = Foo()
x(1, 2, 3) # __call__
Die Definition einer benutzerdefinierten __call__()
-Methode in der Metaklasse ermöglicht es, die Instanz der Klasse als Funktion aufzurufen, wobei die Instanz selbst nicht immer verändert wird.
In [1]: class A:
...: def __init__(self):
...: print "init"
...:
...: def __call__(self):
...: print "call"
...:
...:
In [2]: a = A()
init
In [3]: a()
call