<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      Python 裝飾器:@dataclass

      0
      分享至

      在 Python 中,類通常用于封裝數據和行為。傳統方式下,定義一個類并實現初始化方法 (__init__)、表示方法 (__repr__) 和比較方法 (__eq__) 等需要編寫大量重復代碼。對于主要用于存儲數據的類,這些樣板代碼顯得繁瑣且易出錯。

      @dataclass 裝飾器就是為簡化此類場景而設計的,它自動生成初始化函數、表示函數、比較函數等,使數據類的定義簡潔、清晰,并保持類型提示完整。

      一、什么是 @dataclass

      @dataclass 是 Python 3.7 引入的內置裝飾器(位于 中),用于聲明“數據類”(Data Class)。

      數據類的核心特點:

      (1)自動生成初始化方法

      根據類屬性生成 __init__ 方法。

      (2)自動生成表示方法

      生成 __repr__ 方法,便于調試和日志輸出。

      (3)自動生成比較方法

      可選生成 __eq__、__lt__ 等方法,實現對象比較。

      (4)支持類型提示

      屬性可通過類型注解聲明,增強可讀性和靜態分析能力。

      (5)可選字段控制

      可通過模塊中的 field() 自定義默認值、初始化行為、比較參與情況等。

      默認情況下,@dataclass 會生成 __init__、__repr__ 和 __eq__ 方法,但不會生成排序相關方法(需要顯式指定 order=True)。

      二、基本用法

      1、定義數據類

          y: float

      自動生成:

      def __eq__(self, other): ...

      2、使用數據類

      print(p1 == p3)    # False

      數據類讓類定義簡潔,代碼可讀性大幅提升。

      三、字段自定義

      dataclasses.field 提供更多靈活選項:

          id: int = field(init=False, repr=False)    # 不在 __init__ 中初始化,不在 __repr__ 中顯示

      init=False:字段不參與初始化方法

      repr=False:字段不參與 __repr__ 輸出

      compare=False:字段不參與對象比較

      default / default_factory:設置默認值或生成默認值的工廠函數

      其中,default_factory 參數用于生成可變默認值(如列表、字典),避免所有實例共享同一引用:

          grades: list[int] = field(default_factory=list)    # 每個實例獨立列表

      四、裝飾器常用參數

      @dataclass 裝飾器可接收參數控制行為。

      常用參數包括:init、repr、eq、order、frozen,以及 Python 3.10+ 引入的 slots、kw_only 等。

      order=True

      自動生成 <、<=、>、>= 等比較方法,默認使用字段定義順序。

      提示:

      order=True 依賴 eq=True,如果顯式關閉 eq,將無法生成排序方法。

      frozen=True

      生成不可變對象,類似于 namedtuple,嘗試修改屬性會拋出 FrozenInstanceError。

      slots=True(Python 3.10+)

      使用 __slots__ 優化內存和訪問速度,防止動態添加新屬性。

      kw_only=True(Python 3.10+)

      強制使用關鍵字參數初始化,提升代碼可讀性并避免參數順序錯誤:

      cfg = Config(host="localhost")    # 必須關鍵字傳參

      五、__post_init__ 特殊方法

      數據類支持 __post_init__ 方法,用于在 __init__ 執行后完成額外初始化操作(如計算派生字段或驗證數據):

              self.area = self.width * self.height

      提示:

      如果使用 frozen=True,在 __post_init__ 中需要通過 object.__setattr__(self, "area", value) 來設置屬性,否則會觸發 FrozenInstanceError。

      六、典型應用場景

      (1)簡化數據存儲類

      print(r.area())    # 50

      (2)不可變配置對象

      cfg.port = 9090  # 報錯:FrozenInstanceError

      (3)排序與比較

      print(players)    # 按 score 排序

      排序規則默認按字段定義順序進行比較,相當于比較 (score, name)。

      七、與傳統類對比

      特性

      傳統類

      數據類(@dataclass)

      __init__

      手動編寫

      自動生成

      __repr__

      手動

      自動生成

      __eq__

      手動

      自動生成

      排序

      手動

      order=True

      類型提示

      可選

      強烈推薦

      默認值

      手動

      field(default=…)

      數據類主要用于存儲數據,不適合包含大量業務邏輯的方法。對于復雜邏輯,可將數據類與實例方法結合使用。

      八、與其他數據容器的對比

      (1)與 typing.NamedTuple 的對比

      NamedTuple 繼承自元組,不可變且支持拆包,但擴展性較弱。

      @dataclass 更靈活,支持可變性、默認值控制及繼承,內存占用略高于 NamedTuple。

      (2)性能與內存考慮

      默認數據類使用 __dict__ 存儲屬性,可通過 slots=True 減少內存占用(Python 3.10+)。

      對性能敏感場景(如創建大量對象),可測試對比 @dataclass、NamedTuple 或傳統類。

      (3)類型檢查器的支持

      主流類型檢查工具(如 mypy、Pyright)能識別 @dataclass,確保類型注解被正確驗證,增強代碼健壯性。

      九、常見誤區

      (1)誤認為數據類字段必須有默認值

      非默認字段必須出現在默認字段之前,否則會報錯:

          b: int = 0  # 正確

      (2)濫用 frozen=True 修改對象

      凍結對象無法修改屬性,嘗試修改會拋出 FrozenInstanceError。

      (3)與繼承組合時的注意事項

      子類繼承數據類時,字段順序和默認值需謹慎,否則可能引發構造函數沖突。

      (4)不適合包含大量業務邏輯的方法

      數據類核心目的是簡化數據封裝,邏輯應以實例方法或外部函數實現。

      小結

      @dataclass 裝飾器用于簡化數據類定義,自動生成構造方法、表示方法、比較方法等,提高代碼可讀性與可維護性。結合 field() 可以自定義默認值、比較邏輯及初始化行為。通過 frozen=True、order=True 和 slots=True 等參數,數據類可以支持不可變對象、排序和內存優化。數據類非常適合存儲數據、實現配置對象、排序對象或輕量級結構體,同時保持類型提示和代碼簡潔性。


      點贊有美意,贊賞是鼓勵

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      被特斯拉坑慘,從壟斷全球到跌落神壇,日本動力電池標桿全線敗退

      被特斯拉坑慘,從壟斷全球到跌落神壇,日本動力電池標桿全線敗退

      藍鯨新聞
      2026-01-02 12:58:28
      越南銀行存錢利息7.3%,在當地做生意網友忍不住往里面存款

      越南銀行存錢利息7.3%,在當地做生意網友忍不住往里面存款

      映射生活的身影
      2026-01-11 13:32:28
      “取消年檢”呼聲越來越大?檢測員被車主反問:檢不檢有何區別?

      “取消年檢”呼聲越來越大?檢測員被車主反問:檢不檢有何區別?

      華庭講美食
      2026-01-12 15:17:01
      有錢!中國足壇新恒大誕生,連買2大強力球星!身價暴漲超5000萬

      有錢!中國足壇新恒大誕生,連買2大強力球星!身價暴漲超5000萬

      籃球看比賽
      2026-01-12 11:17:10
      醫生提醒:早期腦梗不是頭暈,而是頻繁出現這4個異常,要警惕

      醫生提醒:早期腦梗不是頭暈,而是頻繁出現這4個異常,要警惕

      岐黃傳人孫大夫
      2025-12-14 02:00:03
      影后辛芷蕾,這張照片攝影師得加雞腿,抓拍的太到位了

      影后辛芷蕾,這張照片攝影師得加雞腿,抓拍的太到位了

      徐幫陽
      2025-12-23 18:33:38
      “女性偉哥”,來了

      “女性偉哥”,來了

      中國新聞周刊
      2026-01-09 20:47:07
      1夜2人重傷!大鳥賴俊豪傷情更新,北控躲過一劫,天津遭晴天霹靂

      1夜2人重傷!大鳥賴俊豪傷情更新,北控躲過一劫,天津遭晴天霹靂

      后仰大風車
      2026-01-13 00:02:18
      特朗普被出賣,叛徒是自己人?轉身大談中俄,連說兩個“必須”

      特朗普被出賣,叛徒是自己人?轉身大談中俄,連說兩個“必須”

      塵緣而亦
      2026-01-13 00:22:44
      特朗普50%關稅重擊下,“天空之國”扛不住了:成衣廠開工率5%?

      特朗普50%關稅重擊下,“天空之國”扛不住了:成衣廠開工率5%?

      王爺說圖表
      2026-01-12 15:05:28
      反腐大片披露:羅保銘培植老鄉圈搞政商勾連腐敗,90年代一筆收下50萬元現金

      反腐大片披露:羅保銘培植老鄉圈搞政商勾連腐敗,90年代一筆收下50萬元現金

      界面新聞
      2026-01-12 21:20:02
      皇馬的痛!19歲恩德里克獲8.2分+MVP:首秀一劍封喉,助法甲勁旅晉級

      皇馬的痛!19歲恩德里克獲8.2分+MVP:首秀一劍封喉,助法甲勁旅晉級

      側身凌空斬
      2026-01-12 05:57:37
      吊帶紅裙,性感尤物

      吊帶紅裙,性感尤物

      吃瓜黨二號頭目
      2026-01-09 09:59:03
      上任未滿一年就換人,昆藥集團董事長和副董事長雙雙離任

      上任未滿一年就換人,昆藥集團董事長和副董事長雙雙離任

      經濟觀察報
      2026-01-12 20:08:04
      美國急了,日本也急了,西方國家發現中國的高科技實現了飛速發展

      美國急了,日本也急了,西方國家發現中國的高科技實現了飛速發展

      百態人間
      2026-01-12 16:31:09
      道歉了!金帝巧克力被指“擦邊營銷”,是AI生成的么?

      道歉了!金帝巧克力被指“擦邊營銷”,是AI生成的么?

      LOGO研究所
      2026-01-12 18:26:48
      我在葡萄牙發現:好多華人老頭老太太在這買房,背后的心路歷程太扎心了

      我在葡萄牙發現:好多華人老頭老太太在這買房,背后的心路歷程太扎心了

      墜入二次元的海洋
      2026-01-12 04:03:32
      為什么英國仍然被認為是世界強國?

      為什么英國仍然被認為是世界強國?

      霹靂炮
      2026-01-06 22:38:17
      2025年12月亞洲(中國)酒店業發展報告

      2025年12月亞洲(中國)酒店業發展報告

      空間秘探
      2026-01-12 08:05:03
      吵翻天了!美國新版膳食指南重磅發布,國人如何借鑒?

      吵翻天了!美國新版膳食指南重磅發布,國人如何借鑒?

      營養師谷傳玲
      2026-01-10 14:59:39
      2026-01-13 02:40:49
      MediaTea
      MediaTea
      專業的數字媒體、新媒體技術
      1703文章數 72關注度
      往期回顧 全部

      科技要聞

      面對SpaceX瘋狂“下餃子” 中國正面接招

      頭條要聞

      印度批評中國在克勒青河谷開展基建 中方回應

      頭條要聞

      印度批評中國在克勒青河谷開展基建 中方回應

      體育要聞

      一場安東尼奧式勝利,給中國足球帶來驚喜

      娛樂要聞

      蔡少芬結婚18周年,與張晉過二人世界

      財經要聞

      倍輕松信披迷霧 實控人占用資金金額存疑

      汽車要聞

      增配不加價 北京現代 第五代 勝達2026款上市

      態度原創

      數碼
      健康
      房產
      時尚
      軍事航空

      數碼要聞

      ID - COOLING酷凜AT - 120系列機箱風扇開售,59元起

      血常規3項異常,是身體警報!

      房產要聞

      重磅調規!417畝商改住+教育地塊!海口西海岸又要爆發!

      看了日本主婦的搭配才明白,年紀大了這么穿,優雅又不油膩

      軍事要聞

      官方確認:殲10CE在空戰中擊落多架戰機

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 国产一区二区在线视频观看| 天天爱天天躁XXXXAAAA| 无码国产精品久久一区免费| 黑人巨大精品欧美一区二区免费| 免费网站成人亚洲| 强奸福利视频在线观看| 久久精品熟妇丰满人妻99| 武川县| 欧洲vodafone精品性| 99久久国产综合精品女图图等你| 国产成人亚洲欧美二区综合| 国产精品天天看天天狠| 国产最大成人亚洲精品| 无码h片在线观看网站| 久久婷婷久久一区二区三区| 美女福利导航| 国产成人a亚洲精品无| 成人深爱网| 亚洲天码中文字幕第一页| 国产女人高潮毛片| 青铜峡市| 亚洲日韩成人综合| 欧美涩色| 国产太嫩了在线观看| 亚洲欧美成人久久综合中文网| 国产成人精品无码片区在线观看 | 欧美黑吊大战白妞| 色综合中文字幕久久88| 亚洲精品97久久中文字幕无码| 色综合久久久久久久久久| 国产区图片区小说区亚洲区| 亚洲中字幕| 亚洲最大福利视频网| 国产精品免费麻豆入口| 性男女做视频观看网站| 亚洲综合伊人久久综合| 久草在线资源| 中文字幕亚洲人妻| 欧美老熟妇乱子伦牲交视频| 一区二区福利在线视频| 国产精品原创av片国产日韩|