Python Reflexão e Conversão de tipo
-
05-07-2019 - |
Pergunta
Em Python, funções como str (), int (), flutuador (), etc, são geralmente utilizados para efectuar conversões de tipo. No entanto, estes exigem que você sabe em tempo de desenvolvimento que tipo você deseja converter. A subproblema de algum código Python Eu estou tentando escrever é a seguinte:
Dado duas variáveis, foo
e bar
, encontrar o tipo de foo
. (Não se sabe em tempo de desenvolvimento, pois este é o código genérico.) Em seguida, tentar converter bar
para qualquer tipo foo
é. Se isso não puder ser feito, lançar uma exceção.
Por exemplo, digamos que você chamar a função que faz isso conv
. Sua assinatura seria parecido
def conv(foo, bar) :
# Do stuff.
Ele seria chamado de algo como:
result = conv(3.14, "2.718") # result is now 2.718, as a float.
Solução
Use foo.__class__
para obter o tipo de foo
. Em seguida, chamá-lo para a barra de converter para o tipo de foo:
def conv(foo, bar) :
return foo.__class__(bar)
Claro, isso só funciona se o tipo de foo
tem um construtor que sabe como converter bar.
Outras dicas
que seria melhor:
type(foo)(bar)
type(foo)
é definitivamente o melhor, se você quiser verificar um tipo, em seguida, "tipo" é o melhor método, e eu estou no python 2.7 - 3.2.2, type()
funciona perfeitamente.