Отражение Python и преобразование типов - PullRequest
7 голосов
/ 07 марта 2009

В Python для преобразования типов обычно используются такие функции, как str (), int (), float () и т. Д. Однако они требуют, чтобы вы знали во время разработки, какой тип вы хотите преобразовать в. Подзадача некоторого кода Python, который я пытаюсь написать, выглядит следующим образом:

Учитывая две переменные, foo и bar, найдите тип foo. (Это не известно во время разработки, так как это общий код.) Затем попытайтесь преобразовать bar в тип foo. Если это невозможно, выведите исключение.

Например, допустим, вы вызываете функцию, которая делает это conv. Его подпись будет выглядеть как

def conv(foo, bar) :
    # Do stuff.

Это будет называться что-то вроде:

result = conv(3.14, "2.718")  # result is now 2.718, as a float.

Ответы [ 3 ]

16 голосов
/ 07 марта 2009

, что было бы лучше:

type(foo)(bar)
11 голосов
/ 07 марта 2009

Используйте foo.__class__, чтобы получить тип foo. Затем вызовите его, чтобы преобразовать bar в тип foo:

def conv(foo, bar) :
    return foo.__class__(bar)

Конечно, это работает, только если тип foo имеет конструктор, который знает, как преобразовать бар.

0 голосов
/ 05 декабря 2011
type(foo)

определенно лучший, если вы хотите проверить тип, тогда «тип» - лучший метод, и я на python 2.7 - 3.2.2, type() отлично работает.

...