Wie man gleichnamige Methoden mit verschiedenen Parametern in Python schreibt [duplizieren]

8

Ich lerne Python (3.x) von einem Java-Hintergrund.

Ich habe ein Python-Programm, wo ich ein personObject erstellen und es zu einer Liste hinzufügen.

%Vor%

Aber aus Gründen der Flexibilität möchte ich es auch direkt in der addPerson-Methode deklarieren können:

%Vor%

Die addPerson-Methode kann unterscheiden, ob ich ein Person-Objekt oder einen String sende oder nicht.

In Java würde ich zwei verschiedene Methoden erstellen:

%Vor%

Ich kann nicht herausfinden, wie man das in Python macht. Ich kenne eine type () -Funktion, die ich verwenden könnte, um zu überprüfen, ob der Parameter ein String oder ein Objekt ist. Das scheint mir jedoch unordentlich zu sein. Gibt es einen anderen Weg, es zu tun?

BEARBEITEN:

Ich nehme an, die alternative Problemumgehung wäre ungefähr so ​​(python):

%Vor%

Aber es scheint chaotisch im Vergleich zu der überladenen Lösung in Java.

    
Einar 13.03.2014, 11:33
quelle

2 Antworten

5

Unter Verwendung der Referenz, auf die @Kevin zeigt, können Sie Folgendes tun:

%Vor%

Das Ergebnis wird sein:

%Vor%

(Sie müssen zuerst multimethod installieren)

    
Lorenzo Baracchi 13.03.2014 12:57
quelle
1

Ein gängiger Weg, um dieses spezielle Muster zu implementieren, ist wie folgt:

%Vor%

Ich weiß nicht, ob das für dich funktioniert oder nicht. Sie möchten den Fehler fangen, den Person hier erzeugt, wenn Sie ihn mit einem vorhandenen Person aufrufen. Es ist wahrscheinlich sogar besser, wenn das etwas wie person_factory ist, da es einfach das existierende Objekt zurückgeben kann, wenn es bereits eine Person ist, anstatt eine Ausnahme auszulösen.

Multimethods sind in Python einfach anders; Mit Python können Sie nahezu jede Art von semantischer Schnittstelle implementieren, die auf Kosten von zusätzlicher Arbeit unter der Haube entsteht, und Sie können sich normalerweise dorthin bewegen, wo Sie diese "irgendwo" am besten verstecken können.

Auch ... gibt es Vorteile ... Dinge, die man manchmal in C ++ / C # / Java sieht:

%Vor%

kann in Python nur durch

ersetzt werden %Vor%

(obwohl C ++ und C # jetzt auto haben, die auch solche Dinge handhaben können, afaik).

    
Corley Brigman 13.03.2014 12:11
quelle