Maison > développement back-end > Tutoriel Python > Comment Python obtient-il un comportement de type surcharge de méthode ?

Comment Python obtient-il un comportement de type surcharge de méthode ?

Linda Hamilton
Libérer: 2024-11-21 13:36:20
original
737 Les gens l'ont consulté

How Does Python Achieve Method Overloading-like Behavior?

Surcharge de méthode en Python

En Python, le concept de surcharge de méthode n'est pas directement pris en charge comme c'est le cas dans des langages comme C . Cependant, il existe une technique similaire appelée « répartition multiple » qui permet de répartir les fonctions en fonction des types de leurs arguments au moment de l'exécution.

Répartition multiple avec package multipledispatch

Le package multipledispatch dans Python fournit un moyen d'implémenter plusieurs fonctionnalités de répartition. Il permet d'enregistrer des fonctions avec des types d'arguments spécifiques, permettant leur sélection dynamique au moment de l'exécution.

Solution

À l'aide du package multipledispatch, vous pouvez définir plusieurs fonctions avec le même nom, en spécifiant des arguments différents. combinaisons de types :

from multipledispatch import dispatch
from collections import namedtuple
from types import LambdaType

Sprite = namedtuple('Sprite', ['name'])
Point = namedtuple('Point', ['x', 'y'])
Curve = namedtuple('Curve', ['x', 'y', 'z'])
Vector = namedtuple('Vector', ['x','y','z'])

@dispatch(Sprite, Point, Vector, int)
def add_bullet(sprite, start, direction, speed):
    print("Called Version 1")

@dispatch(Sprite, Point, Point, int, float)
def add_bullet(sprite, start, headto, speed, acceleration):
    print("Called version 2")

@dispatch(Sprite, LambdaType)
def add_bullet(sprite, script):
    print("Called version 3")

@dispatch(Sprite, Curve, int)
def add_bullet(sprite, curve, speed):
    print("Called version 4")
Copier après la connexion

Utilisation

Pour utiliser les fonctions enregistrées, appelez simplement la fonction souhaitée avec l'argument approprié types :

sprite = Sprite('Turtle')
start = Point(1,2)
direction = Vector(1,1,1)
speed = 100 #km/h
acceleration = 5.0 #m/s**2
script = lambda sprite: sprite.x * 2
curve = Curve(3, 1, 4)
headto = Point(100, 100) # somewhere far away

add_bullet(sprite, start, direction, speed)
add_bullet(sprite, start, headto, speed, acceleration)
add_bullet(sprite, script)
add_bullet(sprite, curve, speed)
Copier après la connexion

Cette approche offre une flexibilité dans la création de fonctions avec différentes combinaisons d'arguments tout en évitant les inconvénients de la surcharge en Python.

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.cn
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