當前位置:
首頁 > 新聞 > 理解Python數據類(下)

理解Python數據類(下)

雷鋒網按:本文為AI研習社編譯的技術博客,原標題 Understanding Python Dataclasses?—?Part 2 ,作者為 Shikhar Chauhan 。

翻譯 | 程添傑          整理 | MY

我們已經知道 Dataclasses 會生成他們自身的__init__方法。它同時把初始化的值賦給這些欄位。以下是我們在上一篇博客里定義的內容:

變數名

數據類型

這些內容僅給我們有限的 dataclass 欄位使用範圍。讓我們討論一下這些局限性,以及它們如何通過 dataclass.field 被解決。

複合初始化

考慮以下情形:你想要初始化一個變數為列表。你如何實現它呢?一種簡單的方式是使用__post_init__方法。

數據類 Student 產生了一個名為 marks 的列表。我們不傳遞 marks 的值,而是使用__post_init__方法初始化。這是我們定義的單一屬性。此外,我們必須在__post_init__里調用 get_random_marks 函數。這些工作是額外的。

辛運的是,Python 為我們提供了一個解決方案。我們可以使用 dataclasses.field 來定製化 dataclass 欄位的行為以及它們在 dataclass 的影響。

仍然是上述的使用情形,讓我們從__post_init__里去除 get_random_marks 的調用。以下是使用 dataclasses.field 的情形:

dataclasses.field 接受了一個名為 default_factory 的參數,它的作用是:如果在創建對象時沒有賦值,則使用該方法初始化該欄位。

default_factory 必須是一個可以調用的無參數方法(通常為一個函數)。

這樣我們就可以使用複合形式初始化欄位。現在,讓我們考慮另一個使用場景。

使用全部欄位進行數據比較

通過上篇博文,我們了解到,dataclass 能夠自動生成=這些比較方法。但是這些比較方法的一個缺陷是,它們使用類中的所有欄位進行比較,而這種情況往往不常見。更經常地,這種比較方法會給我們使用 dataclasses 造成麻煩。

考慮以下的使用情形:你有一個數據類用於存放用戶的信息。現在,它可能存在以下欄位:

姓名

年齡

身高

體重

......


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雷鋒網 的精彩文章:

Arm與RISC-V互撕,但為何Arm先關閉攻擊網站?
我們請了五位大咖,共赴 AI 醫學影像盛宴

TAG:雷鋒網 |