Python反射和类型转换

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

最好是这样:

type(foo)(bar)

仅适用于Python 3.0。在Python 2.x中,这仅适用于“新风格类”和内置函数。 - oefe

11
使用foo.__class__来获取foo的类型。然后调用它将bar转换为foo的类型:
def conv(foo, bar) :
    return foo.__class__(bar)

当然,这仅适用于 foo 的类型具有一个构造函数,该构造函数知道如何转换 bar


令人印象深刻。我从未想过它会如此容易。另外令人惊讶的是(我是Python新手,习惯于更接近底层的语言),它可以与内置函数一起使用。 - dsimcha
部分不正确。如果foo是新式对象,则foo.__class__才是foo的类型。否则,它只是类。 - Devin Jeanpierre
只是我说“类型”时不太准确,应该用“类”。但他需要这个类来进行转换。在Python 3中,这种差异已经消失了。 - oefe

0
type(foo)

如果你想检查一个类型,那么"type"方法绝对是最好的选择。我使用的是python 2.7 - 3.2.2版本,type()函数完美运行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接