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

Mary-Kate Olsen
Libérer: 2024-10-22 23:56:29
original
458 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!