.net Python中的泛型类型转换

jxct1oxe  于 2022-11-19  发布在  .NET
关注(0)|答案(4)|浏览(115)

如何在python中执行泛型类型转换,类似于我在C# .NET中使用的以下机制:

string typetoConvertTo = "System.String";
string value = (string)Convert.ChangeType( "1", Type.GetType( typetoConvertTo ));

typetoConvertTo = "System.Int32";
int value1 = (int)Convert.ChangeType( "1", Type.GetType(typetoConvertTo));

Python有针对单个类型的类型转换,但我需要一些更通用的方法,如.NET中的上述方法,因为我正在存储类型,稍后需要执行一个通用转换。

value = str(100)
value1 = int("100")
i2byvkas

i2byvkas1#

类是Python中的第一类对象。

>>> t = str
>>> t(123)
'123'
>>> d = {'str': str}
>>> d['str'](123)
'123'
ycggw6v2

ycggw6v22#

如果由于某种原因需要延迟类型转换,只需将值和类型转换存储为一对。

>>> entry = (int, '123')
>>> entry[0](entry[1])
123

如果你有一整批要做,你可以得到这样的结果

conversions_to_do = {}
conversions_to_do[int] = []
conversions_to_do[str] = []
conversions_to_do[int].append('123')
conversions_to_do[int].append('456')
conversions_to_do[str].append(1.86)

展开与第一个示例类似。
我不得不问,为什么不直接转换呢?也许有一个更简单、更直接的方法来解决你试图解决的实际问题。

91zkwejq

91zkwejq3#

您不需要类型Mapdict,可以使用eval代替,但这几乎就像作弊一样:

>>> t = "int"
>>> v = "3"
>>> eval(t)(v)
3
huus2vyu

huus2vyu4#

我只是想解决同样的问题,然后我尝试了这个,它的工作。如果你仍然没有找到解决方案,这只是为我工作:

from typing import TypeVar, Type

T = TypeVar("T")

def my_method(input, cast_type: Type[T]) -> T:
    print(type(input))
    print(input)

    casted_value = cast_type(input)

    print(type(casted_value))
    print(casted_value)

    return casted_value

my_method(12)

这将打印出以下内容:

<class 'int'>
12
<class 'float'>
12.0

相关问题