python - 从字符串表示“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() 等效的功能?
但它太原始了,因为它无法容纳泛型。
解决方案
推荐阅读
- javascript - 除非我在浏览器中刷新 JSON 文件,否则 Javascript (jQuery) 加载的 JSON 不会更新
- r - 将 data.table 的列乘以向量
- shell - Google Cloud DNS 更改记录资源更新时间
- java - 在没有两个安全配置的情况下禁用/启用 OAuth2
- c - 索引变量在数组移位时不会增加
- angular - Angular 6 - 使用 Observable 触发兄弟姐妹之间的事件
- javascript - 水平滚动表格以适应和缩小父级
- windows - Git替换2个版本相同的应用程序(repo文件夹)
- c# - C# - 更新进度条
- html - 将图像大小调整为 div