四川网站建设网站建设首页

苏州惠捷汽车服务有限公司 2026/09/09 21:10:40

typing模块里常用的类型注解工具,和 Python 3.9+ 原生类型的对应关系及用法如下,刚好能匹配你之前的答题系统场景:

typing类型Python 3.9+ 原生写法作用说明示例
List[T]list[T]标注元素类型为 T 的列表answers: list[SingleAnswer]
Dict[K, V]dict[K, V]标注键类型 K、值类型 V 的字典score: dict[str, int]
Tuple[T1, T2]tuple[T1, T2]标注固定长度和类型的元组q_and_a: tuple[int, str]
Set[T]set[T]标注元素类型为 T 的集合options: set[str]
Optional[T]`TNone`标注变量可以是 T 类型或 None`remark: strNone = None`
Union[T1, T2]`T1T2`标注变量可以是 T1 或 T2 类型`value: intstr`
Literal[val1, val2]Literal[val1, val2]标注变量只能是 val1、val2 等值option: Literal["A", "B", "C", "D"]
Callable[[ArgT], RetT]Callable[[ArgT], RetT]标注函数类型(参数类型 + 返回值类型)func: Callable[[int], bool]

补充说明

  1. Python 3.9 是个分水岭,之后可以直接用原生的list/dict代替List/Dict,但Literal/Callable这类特殊类型还是要从typing导入(Python 3.10+ 可从typingtypes导入)。
  2. 这些类型注解不影响代码运行,主要是给 IDE 做提示、给开发者看,搭配 Pydantic 时还能用来做数据校验。
# 导入dataclass装饰器 from dataclasses import dataclass # ==================== 普通 class 写法 ==================== class CommonProduct: """普通类,需要手动实现 __init__、__repr__、__eq__ 等魔法方法""" # 1. 手动写初始化方法,接收参数并赋值给实例属性 def __init__(self, name: str, price: float, stock: int): self.name = name self.price = price self.stock = stock # 2. 手动写 __repr__ 方法,控制实例打印时的输出格式(方便调试) def __repr__(self): return f"CommonProduct(name='{self.name}', price={self.price}, stock={self.stock})" # 3. 手动写 __eq__ 方法,定义两个实例的相等判断规则 def __eq__(self, other): # 先判断 other 是否是 CommonProduct 类型 if not isinstance(other, CommonProduct): return False # 当 name、price、stock 都相同时,两个实例才相等 return (self.name == other.name and self.price == other.price and self.stock == other.stock) # ==================== dataclass 写法 ==================== @dataclass # 装饰器自动生成 __init__、__repr__、__eq__ 等方法 class DataProduct: """dataclass 写法,无需手动编写魔法方法,只需定义字段和类型注解""" name: str # 商品名称 price: float # 商品价格 stock: int # 商品库存 # ==================== 测试对比 ==================== if __name__ == "__main__": # 1. 测试普通类 p1 = CommonProduct("T恤", 59.9, 100) p2 = CommonProduct("T恤", 59.9, 100) print("普通类实例打印:", p1) # 调用 __repr__ print("普通类实例相等判断:", p1 == p2) # 调用 __eq__,输出 True print("-" * 50) # 2. 测试 dataclass dp1 = DataProduct("牛仔裤", 129.9, 50) dp2 = DataProduct("牛仔裤", 129.9, 50) print("dataclass实例打印:", dp1) # 自动生成的 __repr__ print("dataclass实例相等判断:", dp1 == dp2) # 自动生成的 __eq__,输出 True

eq它的本质就是比对两个类的值是否相等,当然了只能比对整体,不能单个比对 就算一个不相等,它也是返回false repr它是默认会打印出你传入参数值 方便调试 dataclss会自动创建省得你手动 而且只要是传参的类都建议用dataclass 这样省去写__init__ repr就算地址不同 但是值相同就是一致的 但是他的只是属于类型提示 并不能校验 并不会报错 对于后端写api的建议使用pydantic他会校验传入的值 如果类型不对会进行报错

from pydantic import BaseModel, Field, ValidationError from typing import Literal # 方法1:用Literal直接限定只能是A、B、C、D class SingleAnswer(BaseModel): question_id: int option: Literal["A", "B", "C", "D"] # 只能选这四个选项 # 方法2:用正则表达式校验(适合更灵活的情况,比如允许小写a-d) class SingleAnswerWithRegex(BaseModel): question_id: int option: str = Field(pattern=r"^[A-Da-d]$") # 正则匹配A-D或a-d # 测试正确的情况 correct_ans = SingleAnswer(question_id=1, option="A") print(correct_ans) # 正常输出 # 测试错误的情况(选项为E) try: wrong_ans = SingleAnswer(question_id=2, option="E") except ValidationError as e: print(e) # 会提示选项必须是A、B、C、D中的一个
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

晋江网站建设服装网站建设

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/aippthttps://www.paperxie.cn/ai/journalsReviewedhttps://ww

2026/06/30 13:44:37

益阳网站建设建设官方网站

如何用OnmyojiAutoScript实现阴阳师全自动托管?3大核心功能深度解析【免费下载链接】OnmyojiAutoScriptOnmyoji Auto Script | 阴阳师脚本

2026/06/30 11:54:28

网站建设设计濮阳网站建设

EPPlus 8.0.1深度评测:企业级Excel处理的终极方案【免费下载链接】EPPlusEPPlus-Excel spreadsheets for .NET项目地址: https:/

2026/06/30 10:42:22

洛阳网站建设网站的建设

QCA7005数据手册完整下载指南:电动汽车充电技术开发必备资源【免费下载链接】高通QCA7005数据手册下载高通QCA7005数据手册下载本仓库提供高通QCA7005数据手册ÿ

2026/06/30 13:03:04

合肥网站建设山东网站建设

实拍对比:Cree、欧司朗、Lumileds与国产LED灯珠真实光照效果大解析你有没有过这样的经历?明明两款LED灯珠的参数表看起来一模一样——都是2835封装、3000K

2026/06/30 11:37:26

网站建设收费asp网站建设

在NeurIPS分享我们的TensorRT实践经验在AI模型日益复杂、部署场景愈发多元的今天,一个看似简单的问题却常常困扰着系统工程师:为什么训练时表现优异的模型ÿ

2026/06/30 11:36:56

大型网站建设舟山网站建设

从零开始:手把手教你实现Keil与Proteus的51单片机同步调试你有没有过这样的经历?为了验证一段简单的LED闪烁代码,反复烧录芯片、插拔下载线ÿ

2026/06/30 13:21:05

南宁网站建设装饰网站建设

物品结构完整性保持:避免形变失真的训练实践在AI图像生成日益深入工业设计、IP开发和数字孪生等高精度场景的今天,一个看似微小却致命的问题正不断浮现:生成结果中

2026/06/30 13:12:34

网站建设论文长沙营销型网站建设

在日常数据库管理工作中,Navicat作为广受欢迎的数据库连接工具,经常保存着重要的数据库连接配置。但很多用户会遇到一个常见问题:长时间未使用某个数据库连接时

2026/06/30 12:25:01

重庆网站建设网站建设规划书

ARK生存进化游戏启动器TEKLauncher:重塑你的恐龙世界探险体验【免费下载链接】TEKLauncherLauncher for ARK: Survival Evolved项目地址

2026/06/30 12:00:28