Я знаю, что 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
.
Чтобы ответить на некоторые ответы:
-
Нет. Я не могу создать иерархию классов Bullet, потому что это слишком медленно. Фактический код для управления марками находится в C, а мои функции - обертки вокруг API C.
-
Я знаю о аргументах ключевого слова, но проверка на всевозможные комбинации параметров вызывает раздражение, но аргументы по умолчанию помогают выделять
acceleration=0