程式語言手刀必存:Python 的數據類該如何理解?

【我們為什麼挑選這篇文章】Python 是目前世界上的熱門程式語言之一,而本文整理了幾個 Python 數據庫的原理與注意事項,希望這些簡單但實用的小知識可以幫助正在學習 Python 的大家。(責任編輯:林厚勳)

這一篇是 Dataclass 的特徵概述。

Dataclasses 是一些適合於儲存數據對象(data object)的 Python 類。你可能會問,什麼是數據對象?下面是一個並不詳盡的用於定義數據對象的特徵列表:

他們存儲並表示特定的數據類型。例如:一個數字。對於那些熟悉對象關係映射(Object Relational Mapping,簡稱 ORM)的人來說,一個模型實例就是一個數據對象。它表示了一種特定類型的實體。它儲存了用於定義或表示那種實體的屬性。

他們能夠被用於和同類型的其他對象進行比較。例如,一個數字可能大於,小於或等於另一個數字。

當然數據對象還有更多的特徵,但上述內容足以幫助你理解關鍵部分。

為了理解 Dataclases,我們將實現一個簡單的類。它能夠存儲一個數字,並允許我們執行上面提到的各種運算。

首先,我們將使用普通的類,然後我們使用 Dataclasses 來實現相同的結果。

但是在我們開始之前,還是要提一下 Dataclasses 的用法。

Python 3.7 提供了一個裝飾器 dataclass,用以把一個類轉化為 dataclass。

你需要做的就是把類包裹進裝飾器裡:

現在,讓我們進一步瞭解 dataclass 的用法,以及它能為我們改變什麼。

初始化

使用 dataclass

以下是使用了 dataclass 裝飾器之後的變化:

1. 不必定義_init_然後再賦值給 self,裝飾器會注意這一點

2. 我們用一種更可讀的方式定義成員屬性,並帶有類型提示(type hinting)。我們現在立刻就知道 val 的類型是 int。這種方式當然比通常的定義方法可讀性更好。

Python 之道:可讀性很重要

也可以定義默認值:

對象表示是一種對象的字符串表示法,在調試時非常有用。

默認的 Python 對象表示不是非常的有用:

這種表示法不能給我們對象用途的提示,同時將導致可怕的調試經歷。

一種有意義的表示法可以通過在類定義裡,添加一種_repr_方法實現。

dataclass 會自動添加一個_repr_函數,因此我們不必手動實現它了。

數據比較

通常,數據對象會伴隨著相互比較的需要。兩個對象’a’ 和’b’ 之間通常包含以下的運算:

a < b

a > b

a == b

a >= b

a <= b

在 Python 裡,可以通過在類中定義一些方法來實現上述運算。為了保證整篇文章的簡潔性,我將只實現 == 和 < 。

─ ─

(本文經 雷鋒網 授權轉載,並同意 TechOrange 編寫導讀與修訂標題,原文標題為 〈 理解 Python 數據類(上)  〉。)

其他你或許會想知道的 Python 知識

為什麼 Python 這麼慢?比其他程式語言慢十倍的病根就在「全局解釋器鎖」
美國工程師花一週寫 Python,用一支機械手臂毀了「威利在哪裡?」這個遊戲
《經濟學人》專文探討:「為什麼 Python 是世上最屌的程式語言?」
【工程師共通壞毛病】用 Python 做數據科學時容易忘記的八個要點,你記得嗎?


科技報橘 2019 全面徵才 ── 跟我們一起找到台灣在國際中的創新產業定位

我們正在找「社群編輯 3 名」、「資深採訪編輯 2 名

來信請將履歷與文字作品寄至 [email protected],信件名稱:應徵 TechOrange 社群編輯:(您的大名)

 

 

點關鍵字看更多相關文章: