Beim Erstellen einer Klasse verwende ich häufig init, aber wenn ich call erhalte, interpretiere ich es auf meine eigene Weise.
Die Umgebung ist Python 3.5.1 :: Anaconda 2.5.0 (x86_64) Laufen Sie auf Jupyter Notebook
__call__
wird aktiviert, wenn es wie eine Funktion aufgerufen wirdKlassenbeispiel
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)
Ausführungsbeispiel
>>> a = A(1)
A init
>>> a(2)
A call
3
>>> b = B(1,3)
A init
B init
>>> b(4)
B call
8
In der Instanziierung wird nur __init__
aufgerufen. Wenn Sie jedoch die erstellte Instanz mit Argumenten wie einer Funktion aufrufen, wird __call__
aufgerufen.
Wenn Sie __call__
einen Rückgabewert geben, können Sie den von der Instanz erhaltenen Wert natürlich für eine andere Variable verwenden.
Recommended Posts