如何根据类型转换对象类型?

Posted

技术标签:

【中文标题】如何根据类型转换对象类型?【英文标题】:How to convert object type based on type? 【发布时间】:2016-04-28 23:20:01 【问题描述】:

我有:

x = float(1.0)
y = int(2)

t1 = type(x)
t2 = type(x).__name__

如果我打印 t1t2 我可以看到以下内容:

print t1
>>> <type 'float'>

print t2
>>> float

如何使用t1t2用最少的代码将y改成float类型?

【问题讨论】:

您是否需要 使用类型 name 来执行此操作,还是只使用类型本身可以?正如下面的答案所示,后一种情况更直接。 是的,我需要使用 name 类型来执行此操作。 其实,我不需要这个名字。我的错。我正在编辑问题并接受最佳答案。 【参考方案1】:

您可以执行以下操作:

x = float(1.0)
y = int(2)

y = type(x)(y)
print(type(y))

输出

float

如果您需要使用类型 name 执行此操作,只需将 x 的类型分配给变量并将其用作函数即可:

x = float(1.0)
y = int(2)

t = type(x)
y = t(y)
print(type(y))

输出

float

【讨论】:

您在答案中的哪个位置使用了 name 类型?你的变量都不是字符串【参考方案2】:

对于在调用时转换传递参数的类型(如intlist 等),只需使用对该类型的引用,然后调用它。

>>> x = 1.
>>> y = 2
>>> t = type(x)
>>> t(y)
2.0
>>> tup = (1,2)
>>> lst = [3,4]
>>> t2 = type(tup)
>>> t2(lst)
(3, 4)

【讨论】:

我(OP)犯了一个错误。我不需要类型 name【参考方案3】:

您可以首先使用__builtins__ 模块将表示type 名称的字符串(例如"float")转换为类型(更多信息请参见here):

def get_type_by_name(type_name):
    return getattr(__builtins__, type_name)
the_type = get_type_by_name('float')

然后,进行转换:

y = the_type(x)

您也可以为此使用eval,但通常是eval is (harshly) discouraged。

【讨论】:

【参考方案4】:

你已经有了很好的答案,但由于编程也是玩玩东西,这里有一个替代方案:

y.__class__(x)

【讨论】:

也许你的意思是y = x.__class__(y)

以上是关于如何根据类型转换对象类型?的主要内容,如果未能解决你的问题,请参考以下文章

构建项目得到错误“无法转换类型的对象......”

JS中数据类型转换

JS系列:js数据类型的转换

10.3 对象类型的转换

如何将 html 对象转换为字符串类型?

如何将字符串类型转换为 Typescript 中的一种对象类型?