title: "Python-Methode call: Alles, was Sie wissen müssen" description: "Tauchen Sie ein in die Methode call in Python. Erfahren Sie, wie sie verwendet wird, den Unterschied zwischen init und call, das Erstellen von aufrufbaren Instanzen und mehr. Enthält Beispiele und Beispielscodes." date: 2023-08-17 language: de author: chandra
Python-Methode call: Alles, was Sie wissen müssen
Python ist eine aufregende Sprache, die für ihre Einfachheit und ihre leistungsstarken Fähigkeiten gelobt wird. Sie bietet mehrere integrierte Funktionen und Methoden, mit denen Sie effizienten und wiederverwendbaren Code schreiben können. Heute werden wir uns jedoch auf eine spezielle Methode konzentrieren, die vielen Python-Programmierern möglicherweise nicht bekannt ist - die __call__
-Methode.
Die __call__
-Methode in Python ist ein einzigartiges Attribut der Python-Klassen und stellt einen integralen Bestandteil der objektorientierten Programmierung von Python dar. Lassen Sie uns ihre Zwecke, Verwendungsmöglichkeiten und Vorteile ergründen und lernen, wie man sie anhand praktischer Beispiele verwendet.
Möchten Sie schnell Datenvisualisierungen aus einem Python-Pandas-Datenframe ohne Code erstellen?
PyGWalker ist eine Python-Bibliothek für die explorative Datenanalyse mit Visualisierung. PyGWalker (opens in a new tab) kann Ihren Workflow zur Datenanalyse und -visualisierung in Jupyter Notebook vereinfachen, indem es Ihren Pandas-Datenframe (und Polars-Datenframe) in eine Tableau-ähnliche Benutzeroberfläche für die visuelle Exploration umwandelt.
Was ist die Methode call in Python?
Im Python-Programmieren sind Funktionen Objekte erster Klasse. Das bedeutet, sie können Variablen zugewiesen, in Datenstrukturen gespeichert, als Argumente übergeben oder sogar als Werte aus anderen Funktionen zurückgegeben werden. Was ist, wenn wir Instanzen von Klassen auf ähnliche Weise behandeln könnten? Die __call__
-Methode ermöglicht genau das.
Die __call__
-Methode ist eine spezielle Methode in Python-Klassen, die eine Instanz der Klasse aufrufbar macht. Sie ermöglicht es, eine Instanz einer Klasse wie eine Funktion zu behandeln und erweitert damit die Vielseitigkeit der objektorientierten Programmierung von Python.
Betrachten Sie dieses einfache Beispiel:
class Test:
def __call__(self, x):
return x**2
T = Test()
print(T(5)) # gibt aus: 25
Hier haben wir eine Test
-Klasse mit einer __call__
-Methode definiert. Wir erstellen eine Instanz T
der Klasse Test
. Normalerweise würde der Aufruf von T(5)
einen TypeError
zurückgeben, der besagt, dass das Objekt 'Test' nicht aufrufbar ist. Mit der definierten __call__
-Methode wird jedoch das Quadrat des Arguments zurückgegeben, ähnlich wie bei einer Funktion.
Wie wird die Methode call in Python verwendet?
Um die __call__
-Methode zu nutzen, müssen Sie sie einfach in Ihrer Klasse definieren. Die __call__
-Methode kann beliebig viele Argumente akzeptieren, genau wie eine typische Funktion. Sie können diese Methode also nutzen, um das Verhalten Ihrer Klasseninstanzen an Ihre Bedürfnisse anzupassen.
Eine häufige Verwendung der __call__
-Methode in Python besteht darin, funktionsähnliche Objekte zu erstellen, die ihren Zustand beibehalten. Da jede Instanz der Klasse ihren eigenen einzigartigen Zustand haben kann, kann er verwendet werden, um einen bestimmten Zustand zwischen Aufrufen beizubehalten. Hier ist ein Beispiel:
class Counter:
def __init__(self):
self.count = 0
def __call__(self):
self.count += 1
return self.count
C = Counter()
print(C()) # gibt aus: 1
print(C()) # gibt aus: 2
In der Klasse Counter
erhöht die __call__
-Methode eine Zählvariable jedes Mal, wenn die Instanz aufgerufen wird, und erstellt so effektiv ein zustandsbehaftetes aufrufbares Objekt.
Python call vs init
Nun fragen Sie sich vielleicht: Was ist der Unterschied zwischen __call__
und __init__
in Python? Sind sie nicht beide Methoden in Python-Klassen?
Ja, das sind sie, aber sie dienen unterschiedlichen Zwecken. Die __init__
-Methode wird verwendet, um eine Instanz einer Klasse zu initialisieren. Es handelt sich um die Methode, die aufgerufen wird, wenn Sie ein neues Objekt, auch bekannt als Instanz, einer Klasse erstellen. Auf der anderen Seite macht die __call__
-Methode eine Instanz wie eine Funktion aufrufbar.
Denken Sie daran, __init__
wird einmal aufgerufen, wenn das Objekt erstellt wird. __call__
kann hingegen mehrmals aufgerufen werden, wann immer die Instanz aufgerufen wird.
Hier ist ein Beispiel:
class Test:
def __init__(self, value=0):
print('init-Methode aufgerufen')
self.value = value
def __call__(self, x):
print('call-Methode aufgerufen')
return self.value + x
T = Test(5) # gibt aus: init-Methode aufgerufen
print(T(10)) # gibt aus: call-Methode aufgerufen, 15
In diesem Beispiel wird, wenn wir eine Instanz T
von Test
erstellen, die __init__
-Methode aufgerufen und gibt 'init-Methode aufgerufen' aus. Wenn wir T(10)
aufrufen, wird die __call__
-Methode aufgerufen und gibt 'call-Methode aufgerufen' aus.
Kann die call-Methode verwendet werden, um aufrufbare Instanzen zu erstellen?
Ja, tatsächlich! Die __call__
-Methode ist speziell dafür konzipiert, Instanzen von Klassen aufrufbar zu machen, ähnlich wie Funktionen. Dies ist ein großartiges Werkzeug, um Objekte zu erstellen, die ihren Zustand über mehrere Aufrufe hinweg beibehalten müssen. Sie können dies beispielsweise verwenden, um zu verfolgen, wie oft eine Funktion aufgerufen wird, oder um Ergebnisse zu zwischenspeichern, die wiederverwendet werden können.
Betrachten wir ein Beispiel, das eine Klasse erstellt, die Fibonacci-Zahlen generiert und die __call__
-Methode verwendet, um den Zustand über Aufrufe hinweg durchgehend beizubehalten:
class Fibonacci:
def __init__(self):
self.cache = {0: 0, 1: 1}
def __call__(self, n):
if n not in self.cache:
self.cache[n] = self.__call__(n-1) + self.__call__(n-2)
return self.cache[n]
F = Fibonacci()
print(F(10)) # gibt aus: 55
Was ist der Zweck der call-Methode in Python?
In Python bietet die __call__
-Methode eine Möglichkeit, Instanzen von Klassen zu verwenden, als wären sie Funktionen. Dies bietet Flexibilität, da es Klassen ermöglicht, Funktionen ähnliches Verhalten zu zeigen, während sie ihre Natur als Objekte einer Klasse beibehalten. Die __call__
-Methode ermöglicht es Instanzen auch, den Zustand zwischen den Aufrufen beizubehalten, was in verschiedenen Programmierszenarien äußerst nützlich sein kann.
Die __call__
-Methode ist nur eine von vielen speziellen Methoden in Python, die den "Magic" hinter der objektorientierten Programmierung in Python ermöglichen. Das Verständnis und die richtige Verwendung dieser Methoden kann die Flexibilität und Effektivität Ihres Python-Codes erheblich verbessern.
Werfen wir einen Blick auf unsere FAQs, um diesen Python-__call__
-Leitfaden abzuschließen.
FAQs
1. Was ist die __call__
-Methode in Python?
Die __call__
-Methode ist eine spezielle Methode in Python-Klassen. Sie ermöglicht es, eine Instanz einer Klasse wie eine Funktion aufzurufen. Sie ermöglicht es auch einer Klasseninstanz, einen Zustand beizubehalten, der bei jedem Aufruf geändert oder abgerufen werden kann.
2. Was ist der Unterschied zwischen den __init__
- und __call__
-Methoden in Python?
Die __init__
-Methode wird verwendet, um eine Instanz einer Klasse zu initialisieren. Sie wird automatisch aufgerufen, wenn eine Instanz der Klasse erstellt wird. Die __call__
-Methode hingegen ermöglicht es, eine Instanz wie eine Funktion aufrufbar zu machen. Sie kann mehrmals aufgerufen werden und erlaubt es der Instanz, ihren Zustand zwischen Aufrufen beizubehalten.
3. Kann die __call__
-Methode verwendet werden, um aufrufbare Instanzen zu erstellen?
Ja, die __call__
-Methode kann verwendet werden, um aufrufbare Instanzen zu erstellen. Dies ermöglicht es Instanzen von Klassen, sich wie Funktionen zu verhalten und ihnen zu ermöglichen, den Zustand zwischen den Aufrufen beizubehalten, was sie für verschiedene Programmierszenarien nützlich macht.
Schlussfolgerung
Zusammenfassend ist die __call__
-Methode ein leistungsstolles Werkzeug in der Programmiersprache Python, das flexibles, funktionenähnliches Verhalten für Klasseninstanzen bietet. Mit einem richtigen Verständnis und einer richtigen Verwendung dieser Methode können Sie vielseitigere und effizientere Python-Programme erstellen. Viel Spaß beim Codieren!