Maison >développement back-end >Tutoriel Python >Python peut-il implémenter la surcharge de méthodes et comment ?

Python peut-il implémenter la surcharge de méthodes et comment ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-22 23:56:29560parcourir

Can Python Implement Method Overloading and How?

Surcharge de méthode en Python : une explication détaillée

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn