Maison >développement back-end >Tutoriel Python >Comment Python obtient-il un comportement de type surcharge de méthode ?
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.
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.
À 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")
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)
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!