Maison >développement back-end >Tutoriel Python >Python peut-il implémenter la surcharge de méthodes et comment ?
Problème :
Tentative d'implémentation de la surcharge de méthode à l'aide du code suivant :
<code class="python">class A: def stackoverflow(self): print('first method') def stackoverflow(self, i): print('second method', i) ob = A() ob.stackoverflow(2) # Output: second method 2 ob.stackoverflow() # Error: Takes exactly 2 arguments (1 given)</code>
Solution :
Contrairement au remplacement de méthode, la surcharge de méthode n'est pas prise en charge de manière native dans Python. Par conséquent, il est nécessaire de l'implémenter différemment :
<code class="python">class A: def stackoverflow(self, i='some_default_value'): print('only method') ob = A() ob.stackoverflow(2) # Output: second method 2 ob.stackoverflow() # Output: only method</code>
En spécifiant une valeur d'argument par défaut pour le paramètre i, une seule fonction peut gérer les deux scénarios. Cette approche surcharge efficacement la fonction en fonction du nombre d'arguments fournis.
Exploration plus approfondie :
Python 3.4 a introduit des fonctions génériques à répartition unique à l'aide du décorateur functools.singledispatch :
<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>
Cela fournit une manière plus explicite de définir la surcharge de méthode pour différents types d'arguments.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!