Reflexión de Python y conversión de tipos
-
05-07-2019 - |
Pregunta
En Python, funciones como str (), int (), float (), etc. se usan generalmente para realizar conversiones de tipos. Sin embargo, esto requiere que usted sepa en el momento del desarrollo a qué tipo desea convertir. Un problema secundario de algunos códigos Python que estoy tratando de escribir es el siguiente:
Dadas dos variables, foo
y bar
, encuentre el tipo de foo
. (No se sabe en el momento del desarrollo, ya que este es un código genérico). Luego, intente convertir barra
a cualquier tipo que sea foo
. Si esto no se puede hacer, lance una excepción.
Por ejemplo, supongamos que llama a la función que hace este conv
. Su firma se vería como
def conv(foo, bar) :
# Do stuff.
Se llamaría algo así como:
result = conv(3.14, "2.718") # result is now 2.718, as a float.
Solución
Use foo .__ class__
para obtener el tipo de foo
. Luego llámalo para convertir la barra al tipo de foo:
def conv(foo, bar) :
return foo.__class__(bar)
Por supuesto, esto solo funciona si el tipo de foo
tiene un constructor que sabe cómo convertir la barra.
Otros consejos
eso sería lo mejor:
type(foo)(bar)
type(foo)
es definitivamente el mejor, si desea marcar un tipo, entonces " escriba " es el mejor método, y estoy en python 2.7 - 3.2.2, type ()
funciona perfectamente.