Python-Funktion überladen

Ich weiß, dass Python unterstützt nicht die Methode überladen, aber ich habe ein problem, ich kann nicht scheinen, um zu lösen, in einem schönen Pythonic way.

Ich mache ein Spiel, wo ein Charakter braucht, um zu Schießen eine Vielzahl von Kugeln, aber wie Schreibe ich verschiedene Funktionen für die Erstellung dieser Kugeln? Zum Beispiel nehmen wir an ich habe eine Funktion erstellt, die Kugel Reisen von Punkt A nach B mit einer bestimmten Geschwindigkeit. Ich würde eine Funktion schreiben wie dieses:

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

Aber ich möchte schreiben, andere Funktionen für die Erstellung von Aufzählungszeichen wie:

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

Und so weiter mit vielen Variationen. Gibt es einen besseren Weg, es zu tun, ohne so viele keyword-Argumente führen die immer irgendwie hässlich schnell. Die Umbenennung jede Funktion ist ziemlich schlecht, weil man entweder add_bullet1, add_bullet2 oder add_bullet_with_really_long_name.

Einige Antworten:

  1. Nein, ich kann nicht erstellen Sie eine Kugel in der Hierarchie der Klasse, weil das ist zu langsam. Der eigentliche code für die Verwaltung von Kugeln ist in C und meine Funktionen sind Wrapper um die C-API.

  2. Weiß ich über die keyword-Argumente aber die überprüfung für alle möglichen Kombinationen der Parameter ist immer ärgerlich, aber Standard-Argumente helfen zuzuteilen wie acceleration=0

Kommentar zu dem Problem - Öffnen
Arbeiten für nur einen parameter, aber hier (für Besucher hier von einer Suchmaschine): docs.python.org/3/library/... Kommentarautor: leewz
dies scheint wie ein guter Ort für default-Werte. Sie können noch auf Keine und einfach überprüfen für Sie. die zusätzlichen boolean Auswirkungen scheint negligable Kommentarautor: Andrew Scott Evans
Verwenden Sie die default-Wert + if + else, das gleiche zu tun wie C++ zu tun. Dies ist eines der sehr wenigen Dinge, die C++ hat bessere Lesbarkeit als Python... Kommentarautor: Deqing

InformationsquelleAutor der Frage Bullets | 2011-06-22

Schreibe einen Kommentar