from typing import Dict, ClassVar, get_type_hints
from dataclasses import dataclass
@dataclass
class Starship:
hitpoints: int = 50
get_type_hints(Starship) // {'hitpoints': int}
Starship.__annotations__ // {'hitpoints': int}
dataclasses.__annotations__ // The annotations of the dataclasses module.
get_type_hints(get_type_hints)
resolved_hints = typing.get_type_hints(MyClass)
field_names = [field.name for field in fields(MyClass)]
resolved_field_types = {name: resolved_hints[name] for name in field_names}
dataclasses.py是一个模块,它通过使用字段注释为生成常规类方法提供装饰符和函数。这意味着在处理类之后,用户定义的字段应使用PEP 526 Syntax of Variable annotations形成。模块注释可以作为
__annotations__
访问。根据Runtime effects of type annotations,可以通过
__annotations__
属性或使用typing.get_type_hints(最后一个是推荐的)来访问带注释的类型。请参阅下面的一些代码示例:
检查
__annotations__
会提供原始注释,但这些注释不一定对应于数据类的字段类型。像ClassVar和InitVar这样的东西出现在__annotations__
中,即使它们不是字段,继承的字段也不会出现。相反,对数据类调用^{} ,并检查字段对象:
__annotations__
和fields
都不会解析字符串注释。如果要解析字符串注释,最好的方法可能是^{get_type_hints
将包括ClassVars和InitVars,因此我们使用fields
来过滤它们:另一方面,还有:
相关问题 更多 >
编程相关推荐