專做藍領招聘網(wǎng)站有哪些貴陽網(wǎng)站建設王道下拉惠
鶴壁市浩天電氣有限公司
2026/01/24 12:47:21
專做藍領招聘網(wǎng)站有哪些,貴陽網(wǎng)站建設王道下拉惠,宜賓市住房和城鄉(xiāng)建設局網(wǎng)站,如何提高wordpress訪問速度typing模塊里常用的類型注解工具#xff0c;和 Python 3.9 原生類型的對應關系及用法如下#xff0c;剛好能匹配你之前的答題系統(tǒng)場景#xff1a;typing 類型Python 3.9 原生寫法作用說明示例List[T]list[T]標注元素類型為 T 的列表answers: list[SingleAnswer]Dict[K, V]di…typing模塊里常用的類型注解工具和 Python 3.9 原生類型的對應關系及用法如下剛好能匹配你之前的答題系統(tǒng)場景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]標注函數(shù)類型參數(shù)類型 返回值類型func: Callable[[int], bool]補充說明Python 3.9 是個分水嶺之后可以直接用原生的list/dict代替List/Dict但Literal/Callable這類特殊類型還是要從typing導入Python 3.10 可從typing或types導入。這些類型注解不影響代碼運行主要是給 IDE 做提示、給開發(fā)者看搭配 Pydantic 時還能用來做數(shù)據(jù)校驗。# 導入dataclass裝飾器 from dataclasses import dataclass # 普通 class 寫法 class CommonProduct: 普通類需要手動實現(xiàn) __init__、__repr__、__eq__ 等魔法方法 # 1. 手動寫初始化方法接收參數(shù)并賦值給實例屬性 def __init__(self, name: str, price: float, stock: int): self.name name self.price price self.stock stock # 2. 手動寫 __repr__ 方法控制實例打印時的輸出格式方便調(diào)試 def __repr__(self): return fCommonProduct(name{self.name}, price{self.price}, stock{self.stock}) # 3. 手動寫 __eq__ 方法定義兩個實例的相等判斷規(guī)則 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) # 調(diào)用 __repr__ print(普通類實例相等判斷:, p1 p2) # 調(diào)用 __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它的本質(zhì)就是比對兩個類的值是否相等當然了只能比對整體不能單個比對 就算一個不相等它也是返回false repr它是默認會打印出你傳入?yún)?shù)值 方便調(diào)試 dataclss會自動創(chuàng)建省得你手動 而且只要是傳參的類都建議用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中的一個