首页 > 解决方案 > 从字符串表示“typing.List[Something]”获取类型,例如 typing.List[Something]

问题描述

给定以下代码:

from typing import List
from dataclasses import dataclass, field

@dataclass
class Paradise:
    saints : List[str]

the_type_i_want = Paradise.__dataclass_fields__["saints"].type

the_type_i_want有一个字符串表示"typing.List[str]"

查看类型的内容the_type_i_want.__dict__

我们得到:

 {'_inst': False,
 '_special': False,
 '_name': 'List',
 '__origin__': list,
 '__args__': (str,),
 '__parameters__': (),
 '__slots__': None
 }

现在,再次给出一个字符串表示,例如 :"typing.List[str]"或者更复杂的"typing.List[MyClass]"东西,甚至更糟糕的东西,例如typing.Optional[typing.Map[str,MyOtherClass]]].

我想知道是否可以重新创建相应的类型,其表示将是我指定的类型。

在没有类型擦除的情况下可以在 Python 中使用吗?(您会在某处看到较低类型的 keepstr保存在 中__dict__

所以毕竟我需要的是一个非常通用的方法,它接收一个字符串名称并返回一个类型:

def class_for_name(class_name: str) -> type:
    ???

这是类似的东西:

python 是否具有与 Java Class.forName() 等效的功能?

但它太原始了,因为它无法容纳泛型。

标签: python

解决方案


推荐阅读