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

问题描述

我有一个带有类型化属性的数据类,使用我定义的类型,如下所示:

from dataclasses import dataclass

PositiveFloatType = NewType("PositiveFloat",float)

@dataclass(init=False,frozen=True)
class Foo:
    bar: PositiveFloatType = 1

在运行时,我想了解Foo.bar的类型。也就是说,如果要使用Foo.bar,我想找到Foo类的所有属性,并知道它们的类型名称-获取“ PositiveFloatType”。

我尝试使用inspect无济于事。有什么办法吗?

解决方法

这就是dataclasses模块提供的fields函数的作用:

from dataclasses import fields

for f in fields(Foo):
    print(f.name,f.type.__name__)
,

考虑到f.type可以是字符串这一事实,我可以假设您实际上需要具体的类对象。

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]