@dataclass class StarWarsMovie: title: str episode_id: int opening_crawl: str director: str producer: str release_date: datetime characters: List[str] planets: List[str] starships: List[str] vehicles: List[str] species: List[str] created: datetime edited: datetime url: str
@dataclass class Python(Lang): tab_size: int = 4 is_script: bool = True >>> Python() Python(name='python', strong_type=True, static_type=False, age=28, tab_size=4, is_script=True) @dataclass class Base: x: float = 25.0 y: int = 0 @dataclass class C(Base): z: int = 10 x: int = 15 >>> C() C(x=15, y=0, z=10)
- dataclass通常情况下是unhashable的,因为默认生成的`__hash__`是`None`,所以不能用来做字典的key,如果有这种需求,那么应该指定你的数据类为frozen dataclass
- 小心当你定义了和`dataclass`生成的同名方法时会引发的问题 - 当使用可变类型(如list)时,应该考虑使用`field`的`default_factory`
- 数据类的属性都是公开的,如果你有属性只需要初始化时使用而不需要在其他时候被访问,请使用`dataclasses.InitVar`