Sé que Python no admite la sobrecarga de métodos, pero me he encontrado con un problema que parece que no puedo resolver de una manera agradable Pythonic.
Estoy haciendo un juego donde un personaje necesita disparar una variedad de balas, pero ¿cómo escribo diferentes funciones para crear estas balas? Por ejemplo, supongamos que tengo una función que crea una bala que viaja del punto A al B con una velocidad determinada. Escribiría una función como esta:
def add_bullet(sprite, start, headto, speed):
... Code ...
Pero quiero escribir otras funciones para crear viñetas como:
def add_bullet(sprite, start, direction, speed):
def add_bullet(sprite, start, headto, spead, acceleration):
def add_bullet(sprite, script): # For bullets that are controlled by a script
def add_bullet(sprite, curve, speed): # for bullets with curved paths
... And so on ...
Y así sucesivamente con muchas variaciones. ¿Hay una mejor manera de hacerlo sin usar tantos argumentos de palabras clave porque se vuelve un poco feo rápido? Cambiar el nombre de cada función es bastante mala debido a que obtiene ya sea add_bullet1
, add_bullet2
o add_bullet_with_really_long_name
.
Para abordar algunas respuestas:
No, no puedo crear una jerarquía de clase Bullet porque eso es demasiado lento. El código real para administrar viñetas está en C y mis funciones son envoltorios alrededor de la API de C.
Sé acerca de los argumentos de las palabras clave, pero verificar todo tipo de combinaciones de parámetros se está volviendo molesto, pero los argumentos predeterminados ayudan a
acceleration=0
default value + if + else
para hacer lo mismo que C ++. Esta es una de las pocas cosas que C ++ tiene mejor legibilidad que Python ...
script, curve
son, si tienen un antepasado común, qué métodos admiten. Con el tipeo de pato, depende de usted el diseño de la clase para descubrir qué métodos necesitan admitir. Presumiblemente Script
admite algún tipo de devolución de llamada basada en el paso de tiempo (pero ¿qué objeto debería devolver? ¿La posición en ese paso de tiempo? ¿La trayectoria en ese paso de tiempo?). Presumiblemente start, direction, speed
y start, headto, spead, acceleration
ambos describen tipos de trayectorias, pero nuevamente depende de usted diseñar la clase receptora para saber cómo desempaquetarlos y procesarlos.