Python反射和类型转换

时间:2009-03-07 17:15:41

标签: python reflection type-conversion introspection python-datamodel

在Python中,str(),int(),float()等函数通常用于执行类型转换。但是,这些要求您在开发时了解要转换为的类型。我正在尝试编写的一些Python代码的子问题如下:

给定两个变量foobar,找到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 个答案:

答案 0 :(得分:16)

这是最好的:

type(foo)(bar)

答案 1 :(得分:11)

使用foo.__class__获取foo的类型。然后调用它将bar转换为foo的类型:

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

当然,这仅在foo的类型具有知道如何转换条形的构造函数时才有效。

答案 2 :(得分:0)

type(foo)

绝对是最好的,如果你想检查一个类型,那么“type”是最好的方法,而我在python 2.7 - 3.2.2, type()工作得很好。