日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)

發布時間:2023/12/10 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原標題 Understanding Python Dataclasses?—?Part 2 ,作者為 Shikhar Chauhan 。

這是 Python 最新的 Dataclasses 系列的第二部分內容。在第一部分里,我介紹了 dataclasses 的一般用法。這篇主要介紹另一個特征:dataclasses.field。

我們已經知道 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 造成麻煩。

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

? 姓名

? 年齡

? 身高

? 體重

你僅想比較用戶對象的年齡、身高和體重。你不想比較姓名。這是后端開發者經常會遇到的使用情景。

自動生成的比較方法會比較一下的數組:

這將會破壞我們的意圖。我們不想讓姓名(name)用于比較。那么,如何使用 dataclasses.field 來實現我們的想法呢?

下面是具體步驟:

默認情況下,所用的字段都用于比較,因此我們僅僅需要指定哪些字段用于比較,而實現方法是直接把不需要的字段定義為 filed(compare=False)。

一個更為簡單的應用情形也可以被討論。讓我們定義一個數據類,它被用來存儲一個數字激起字符串表示。我們想讓比較僅僅發生在該數字的值,而不是他的字符串表示。

現在,我們有更大的自由來控制 dataclasses 的行為??雌饋砗馨?

使用全部字段進行數據表示

自動生成的__repr__方法使用所有的字段用于表示。當然,這也不是大多數情形下的理想選擇,尤其是當你的數據類有大量的字段時。單個對象的表示會變得異常臃腫,對調試來說也不利。

想象一下在你的日志里看到這樣的表示吧,然后還要寫一個正則表達式來搜索它。太可怕了,對吧?

當然,我們也能夠個性化這種行為??紤]一個類似的使用場景,也許最合適的用于表示的屬性是姓名(name)。那么對__repr__,我們僅使用它:

這樣看起來就很棒了。調試很方便,比較也有意義!

從初始化中省略字段

目前為止我們看到的所有例子,都有一個共同特點——即我們需要為所有被聲明的字段傳遞值,除了有默認值之外。在那種情形下(指有默認值的情況下),我們可以選擇傳遞值,也可以不傳遞。

但是,還有一種情形:我們可能不想在初始化時設定某個字段的值。這也是一種常見的使用場景。也許你在追蹤一個對象的狀態,并且希望它在初始化時一直被設為 False。更一般地,這個值在初始化時不能夠被傳遞。

那么,我們如何實現上述想法呢?以下是具體內容:

瞧啊!我們現在對 dataclasses 的使用有了更大的靈活性。

總結

希望上兩篇博文能夠幫助你理解 dataclass,希望你能盡快在項目中使用它們!

原文鏈接:https://medium.com/mindorks/understanding-python-dataclasses-part-2-660ecc11c9b8

版權申明:本站文章部分自網絡,如有侵權,請聯系:west999com@outlook.com

特別注意:本站所有轉載文章言論不代表本站觀點!

本站所提供的圖片等素材,版權歸原作者所有,如需使用,請與原作者聯系。

總結

以上是生活随笔為你收集整理的python中的类怎样理解_理解Python数据类:Dataclass fields 的概述(下)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。