Maison >développement back-end >Tutoriel Python >Comment plusieurs répartitions peuvent-elles résoudre le problème de la création de plusieurs types de puces en Python sans surcharge de fonctions ?
Python ne prend pas en charge la surcharge de fonctions, ce qui présente un défi lors de la création de différents types des balles dans les jeux. Cet article cherche à fournir une solution utilisant les techniques de répartition multiple.
Bien que la surcharge de méthode implique la sélection de fonctions au moment de la compilation en fonction des types de données, Python manque cette fonctionnalité. Cependant, la répartition multiple, ou multiméthodes, permet la sélection de fonctions au moment de l'exécution en fonction des types dynamiques de plusieurs arguments.
Le package multipledispatch permet la répartition multiple en Python. Voici comment l'utiliser :
from multipledispatch import dispatch from collections import namedtuple
Définir des types de données personnalisés :
Sprite = namedtuple('Sprite', ['name']) Point = namedtuple('Point', ['x', 'y']) Curve = namedtuple('Curve', ['x', 'y', 'z']) Vector = namedtuple('Vector', ['x','y','z'])
Créer plusieurs fonctions avec des annotations @dispatch spécifiant l'argument attendu types :
@dispatch(Sprite, Point, Vector, int) def add_bullet(sprite, start, direction, speed): # Code ... @dispatch(Sprite, Point, Point, int, float) def add_bullet(sprite, start, headto, speed, acceleration): # Code ...
Et ainsi de suite pour différents variations.
sprite = Sprite('Turtle') start = Point(1,2) direction = Vector(1,1,1) speed = 100 #km/h acceleration = 5.0 #m/s**2 curve = Curve(3, 1, 4) headto = Point(100, 100) add_bullet(sprite, start, direction, speed) add_bullet(sprite, start, headto, speed, acceleration) add_bullet(sprite, lambda sprite: sprite.x * 2) add_bullet(sprite, curve, speed)
Chaque fonction sera appelée en fonction des types d'arguments correspondants, fournissant une solution au problème de création de puces.
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!