怎么给婚恋网站做情感分析,快站怎么做淘客网站,本地营销策划公司,珠海网站友情链接typing模块里常用的类型注解工具#xff0c;和 Python 3.9 原生类型的对应关系及用法如下#xff0c;刚好能匹配你之前的答题系统场景#xff1a;typing 类型Python 3.9 原生写法作用说明示例List[T]list[T]标注元素类型为 T 的列表answers: list[SingleAnswer]Dict[K, V]di…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 类型或 Noneremark: strNone NoneUnion[T1, T2]T1T2标注变量可以是 T1 或 T2 类型value: intstrLiteral[val1, val2]Literal[val1, val2]标注变量只能是 val1、val2 等值option: Literal[A, B, C, D]Callable[[ArgT], RetT]Callable[[ArgT], RetT]标注函数类型参数类型 返回值类型func: Callable[[int], bool]补充说明Python 3.9 是个分水岭之后可以直接用原生的list/dict代替List/Dict但Literal/Callable这类特殊类型还是要从typing导入Python 3.10 可从typing或types导入。这些类型注解不影响代码运行主要是给 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 fCommonProduct(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__输出 Trueeq它的本质就是比对两个类的值是否相等当然了只能比对整体不能单个比对 就算一个不相等它也是返回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(patternr^[A-Da-d]$) # 正则匹配A-D或a-d # 测试正确的情况 correct_ans SingleAnswer(question_id1, optionA) print(correct_ans) # 正常输出 # 测试错误的情况选项为E try: wrong_ans SingleAnswer(question_id2, optionE) except ValidationError as e: print(e) # 会提示选项必须是A、B、C、D中的一个