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

理解Python數據類(上)

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

翻譯 | 程添傑    整理 | 餘杭

這是一個包含兩部分的博文:

這一篇是 Dataclass 的特徵概述

下一篇是Dataclass fields 的概述

引言

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

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

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

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

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

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

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

Python3.7 提供了一個裝飾器 dataclass,用以把一個類轉化為 dataclass。

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

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

初始化

使用 dataclass

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

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

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

Python 之道:可讀性很重要

也可以定義默認值:

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

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

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

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

現在我們就有了一種有意義的對象表示法:

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

數據比較

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

a == b

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

......


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

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


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

馬斯克:特斯拉 AI 晶元六個月之內亮相;摩拜回應性騷擾事件;蘋果集中清洗App Store
極致性能、安全可靠 阿里雲推出首個企業級塊存儲產品Apsara Block Storage

TAG:雷鋒網 |