Python反射和类型转换

Python反射和类型转换,python,reflection,type-conversion,introspection,python-datamodel,Python,Reflection,Type Conversion,Introspection,Python Datamodel,在Python中,str()、int()、float()等函数通常用于执行类型转换。但是,这些要求您在开发时知道要转换为什么类型。我试图编写的一些Python代码的一个子问题如下: 给定两个变量,foo和bar,查找foo的类型。(开发时不知道,因为这是通用代码。)然后,尝试将bar转换为foo的任何类型。如果无法执行此操作,则引发异常 例如,假设您调用执行此操作的函数conv。它的签名看起来像 def conv(foo, bar) : # Do stuff. 这将被称为类似于: re

在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.

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

def conv(foo, bar) :
    return foo.__class__(bar)
当然,这只有在
foo
类型有一个知道如何转换bar的构造函数时才有效。

最好:

type(foo)(bar)

绝对是最好的,如果你想检查一个类型,那么“type”是最好的方法,我使用的是
python2.7-3.2.2,type()
非常有效。

。我从来没想到会这么容易。同样令人惊讶的是(我是Python新手,习惯于更接近金属语言)它可以与内置语言一起工作。部分错误。如果foo是一个新样式的对象,那么foo.\uuuuu类\uuuuuu只是foo的类型。否则,它只是类。唯一不正确的是,当类更精确时,我说的是“type”。但他需要这门课来实现这一转变。在Python3中,这种差异已经消失了,只有在Python3.0中。在Python2.x中,这只适用于“新样式类”和内置类。
type(foo)