Surcharge de fonctions Python : répartition multiple comme solution
Python, contrairement à certains autres langages de programmation, ne prend pas en charge la surcharge de méthodes. Cela signifie que vous ne pouvez pas définir plusieurs fonctions avec le même nom mais des paramètres différents. Cela peut être particulièrement difficile lorsque vous devez créer des fonctions avec des comportements variables en fonction des arguments d'entrée.
Une solution potentielle à ce problème consiste à utiliser la répartition multiple, ce qui permet de répartir dynamiquement les fonctions en fonction des types de leurs arguments. Cette approche est implémentée en Python grâce à l'utilisation de la bibliothèque multipledispatch.
Pour démontrer la répartition multiple en Python, considérons l'exemple de la création de puces avec des propriétés différentes. Nous pouvons définir quatre versions différentes de la fonction add_bullet, chacune gérant une combinaison spécifique d'arguments :
from multipledispatch import dispatch from collections import namedtuple 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")
Dans cet exemple, nous avons défini quatre versions de la fonction add_bullet :
Pour utiliser le add_bullet, nous fournissons simplement les arguments appropriés pour le comportement souhaité. Par exemple :
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) # Called Version 1 add_bullet(sprite, start, headto, speed, acceleration) # Called version 2 add_bullet(sprite, script) # Called version 3 add_bullet(sprite, curve, speed) # Called version 4
Comme vous pouvez le voir, la bibliothèque multipledispatch nous permet de définir plusieurs fonctions avec le même nom mais des types de paramètres différents. Cela fournit un moyen pratique et flexible de gérer des fonctions avec des comportements variables, sans avoir besoin d'arguments de mots clés ou de conventions de dénomination de fonctions complexes.
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!