问题描述
我有一个带有类型化属性的数据类,使用我定义的类型,如下所示:
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]