Heim >Backend-Entwicklung >Python-Tutorial >Wenn das Überladen von Methoden in Python nicht funktioniert?
Methodenüberladung in Python
In Python ist Methodenüberladung die Möglichkeit, mehrere Methoden mit demselben Namen, aber unterschiedlichen Parametern zu definieren. Dies kann jedoch zu unerwartetem Verhalten führen.
Beispiel 1:
<code class="python">class A: def stackoverflow(self): print ('first method') def stackoverflow(self, i): print ('second method', i)</code>
Wenn Sie die Methode mit einem Argument aufrufen, wird die zweite Methode aufgerufen:
<code class="python">ob=A() ob.stackoverflow(2) # Output: second method 2</code>
Aber wenn Sie es ohne Argument aufrufen, gibt Python einen Fehler aus:
<code class="python">ob=A() ob.stackoverflow() # Output: TypeError: stackoverflow() takes exactly 2 arguments (1 given)</code>
Dies liegt daran, dass Python davon ausgeht, dass die erste Methode keine Argumente und kein Standardargument hat .
Lösung:
Um dieses Problem zu lösen, können Sie Standardparameterwerte verwenden:
<code class="python">class A: def stackoverflow(self, i='some_default_value'): print('only method')</code>
Jetzt funktionieren beide Aufrufe:
<code class="python">ob=A() ob.stackoverflow(2) # Output: only method ob.stackoverflow() # Output: only method</code>
Erweitertes Überladen mit Single Dispatch
Python 3.4 führte generische Single-Dispatch-Funktionen ein, mit denen Sie spezifische Verhaltensweisen für verschiedene Argumenttypen definieren können:
<code class="python">from functools import singledispatch @singledispatch def fun(arg, verbose=False): if verbose: print("Let me just say,", end=" ") print(arg) @fun.register(int) def _(arg, verbose=False): if verbose: print("Strength in numbers, eh?", end=" ") print(arg) @fun.register(list) def _(arg, verbose=False): if verbose: print("Enumerate this:") for i, elem in enumerate(arg): print(i, elem)</code>
Dadurch können Sie mit verschiedenen Argumenttypen Spaß machen und das entsprechende Verhalten erzielen:
<code class="python">fun(42) # Output: Strength in numbers, eh? 42 fun([1, 2, 3]) # Output: Enumerate this: # 0 1 # 1 2 # 2 3</code>
Das obige ist der detaillierte Inhalt vonWenn das Überladen von Methoden in Python nicht funktioniert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!