Перегрузка функций Python

Я знаю, что Python не поддерживает перегрузку методов, но я столкнулся с проблемой, которую, похоже, не могу решить с помощью хорошего Pythonic

Я делаю игру, в которой персонаж должен стрелять разными пулями, но как мне написать разные функции для создания этих пуль? Например, предположим, что у меня есть функция, которая создает пулю, перемещающуюся из точки A в точку B с заданной скоростью. Я бы написал такую ​​функцию:

    def add_bullet(sprite, start, headto, speed):
        ... Code ...

Но я хочу написать другие функции для создания маркеров, например:

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

И так далее с множеством вариаций. Есть ли лучший способ сделать это, не используя так много аргументов ключевого слова, чтобы он стал довольно уродливым. Переименование каждой функции тоже довольно плохо, потому что вы получаете либо add_bullet1 , add_bullet2 , либо add_bullet_with_really_long_name .

Чтобы ответить на некоторые ответы:

  1. Нет, я не могу Не создавайте иерархию классов Bullet, потому что это слишком медленно. Фактический код для управления маркерами находится на C, а мои функции - это оболочки вокруг API C.

  2. Я знаю об аргументах ключевых слов, но проверка всевозможных комбинаций параметров становится раздражающей, но аргументы по умолчанию помогают выделять, как ускорение = 0

175
задан Machavity 2 November 2018 в 12:40
поделиться