如何在Python dataclass中定义支持多种类型元素的List?
Python数据类多类型列表字段实现方案
你需要用到Python的联合类型注解实现该需求,根据你使用的Python版本不同,有两种常用写法:
Python 3.10 及以上版本
可以直接用|运算符声明联合类型,同时Python 3.9+支持直接用内置的list代替typing.List做类型注解:
from dataclasses import dataclass @dataclass class User(Mixin): id: int = None # 同时支持列表元素为三类对象,且默认值为None items: list[DefaultItem | SomeSpecificItem | SomeOtherItem] | None = None
Python 3.9 及更早版本
需要从typing模块导入Union和Optional实现:
from dataclasses import dataclass from typing import List, Union, Optional @dataclass class User(Mixin): id: int = None items: Optional[List[Union[DefaultItem, SomeSpecificItem, SomeOtherItem]]] = None
补充说明
- 上述写法均为静态类型注解,仅用于IDE提示、mypy等类型检查工具校验,Python原生运行时不会强制校验字段类型
- 如果你需要运行时自动校验传入的元素类型,可以将标准库的
dataclass替换为pydantic.dataclasses.dataclass,引入后会自动对items字段的元素类型做合法性校验
内容的提问来源于stack exchange,提问作者1110
相关产品推荐
相关产品推荐

