查找数据类属性的类型提示名称

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]