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.
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)
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).
Tags und Links python methods function python-3.x parameter-passing