查找数据类属性的类型提示名称
Finding type hint name of dataclass attributes
我有一个带有类型化属性的数据class,使用我定义的类型,如下所示:
from dataclasses import dataclass
PositiveFloatType = NewType("PositiveFloat", float)
@dataclass(init=False, frozen=True)
class Foo:
bar: PositiveFloatType = 1
在运行时,我想获取 Foo.bar 的类型。即,我想找到 class Foo 的所有属性,并知道它们的类型名称,如果是 Foo.bar - 获取“PositiveFloatType”。
我尝试使用 inspect 无济于事。有什么办法吗?
这就是 dataclasses
模块提供 fields
功能的目的:
from dataclasses import fields
for f in fields(Foo):
print(f.name, f.type.__name__)
作为替代方案,考虑到 f.type
可以是字符串这一事实,我假设您实际上想要具体的 class 对象。
from typing import Any, Type, get_type_hints
def get_field_type(data_class: Type[Any], field_name: str) -> Type[Any]:
return get_type_hints(data_class)[field_name]
我有一个带有类型化属性的数据class,使用我定义的类型,如下所示:
from dataclasses import dataclass
PositiveFloatType = NewType("PositiveFloat", float)
@dataclass(init=False, frozen=True)
class Foo:
bar: PositiveFloatType = 1
在运行时,我想获取 Foo.bar 的类型。即,我想找到 class Foo 的所有属性,并知道它们的类型名称,如果是 Foo.bar - 获取“PositiveFloatType”。
我尝试使用 inspect 无济于事。有什么办法吗?
这就是 dataclasses
模块提供 fields
功能的目的:
from dataclasses import fields
for f in fields(Foo):
print(f.name, f.type.__name__)
作为替代方案,考虑到 f.type
可以是字符串这一事实,我假设您实际上想要具体的 class 对象。
from typing import Any, Type, get_type_hints
def get_field_type(data_class: Type[Any], field_name: str) -> Type[Any]:
return get_type_hints(data_class)[field_name]