如何从类属性中提取类型(运行时类型注释检查)?


from typing import NamedTuple
class A(NamedTuple):
a: str
b: int
c = 0.432

如何检查a是否为字符串?

我已经尝试过:

>> type(A.a)
property

使用typing.NamedTuple创建的命名元组类具有一个_field_types属性,该属性存储将字段名称映射到类型注释的字典:

A._field_types['a']

请记住,这将为您提供注释,这些注释很可能是'str'(字符串(或List[int]之类的东西,或者其他与isinstance检查不兼容的东西。实际上,对注释做任何有用的事情可能比您预期的要难。

你需要一个类的实例。

>>> type(A("foo", 3).a)
<class 'str'>

str注释是没有运行时含义的类型提示

>>> type(A(1,2).a)
<class 'int'>

所以A.a没有某种类型的str是没有意义的;它是一个属性,有一个可以接受任何值的二传手。

在运行时获取类型注释:

>>> A.__annotations__['a']
<class 'str'>

最新更新