Python Reflexion und Typumwandlung
-
05-07-2019 - |
Frage
In Python Funktionen wie str (), int (), Schwimmer () werden usw. eingesetzt Typkonvertierungen durchzuführen. Jedoch erfordern diese Sie zur Entwicklungszeit wissen, welche Art Sie konvertieren möchten. Ein Teilproblem einiger Python Code, den ich zu schreiben bin versucht, ist wie folgt:
zwei Variablen gegeben, foo
und bar
, die Art des foo
finden. (Es ist nicht zum Zeitpunkt der Entwicklung bekannt, wie dieser generische Code.) Dann versuchen bar
zu konvertieren wie auch immer geartete foo
ist. Ist dies nicht getan werden kann, eine Ausnahme aus.
Zum Beispiel, sagen wir, Sie die Funktion aufrufen, die dieses conv
tut. Seine Unterschrift würde wie folgt aussehen
def conv(foo, bar) :
# Do stuff.
Es würde heißen so etwas wie:
result = conv(3.14, "2.718") # result is now 2.718, as a float.
Lösung
Verwenden foo.__class__
die Art der foo
zu bekommen. Dann nennen es bar auf die Art der foo zu konvertieren:
def conv(foo, bar) :
return foo.__class__(bar)
Natürlich funktioniert dies nur, wenn die Art des foo
einen Konstruktor hat, der weiß, wie man bar konvertieren.
Andere Tipps
, das am besten wäre:
type(foo)(bar)
type(foo)
ist definitiv die beste, wenn Sie eine Art überprüfen wollen, dann „Typ“ ist die beste Methode, und ich bin auf python 2.7 - 3.2.2, type()
funktioniert perfekt.