Python中dataclass庫

目錄

  • dataclass語法
    • 一、 簡介
    • 二、 裝飾器參數
    • 三、 數據屬性
      • 1、 參數
      • 2、 使用示例
      • 3、 注意事項
    • 四、 其他
      • 1、 常用函數
      • 2、 繼承
      • 3、 總結
dataclass語法一、 簡介官方文檔的地址為:python.org/3.9/library/dataclasses.html" rel="external nofollow noreferrer">https://docs.python.org/3.9/library/dataclasses.html
dataclass的定義位于python.org/dev/peps/pep-0557/" rel="external nofollow noreferrer">PEP-557,根據定義一個dataclass是指“一個帶有默認值的可變的namedtuple”,廣義的定義就是有一個類,它的屬性均可公開訪問,可以帶有默認值并能被修改,而且類中含有與這些屬性相關的類方法,那么這個類就可以稱為dataclass , 再通俗點講,dataclass就是一個含有數據及操作數據方法的容器 。
乍一看可能會覺得這個概念不就是普通的class么 , 然而還是有幾處不同:
  1. 相比普通class,dataclass通常不包含私有屬性,數據可以直接訪問
  2. dataclass的repr方法通常有固定格式,會打印出類型名以及屬性名和它的值
  3. dataclass擁有__eq____hash__魔法方法
  4. dataclass有著模式單一固定的構造方式,或是需要重載運算符,而普通class通常無需這些工作
我們來創建一個實例:
from dataclasses import dataclass@dataclassclass InventoryItem:"""Class for keeping track of an item in inventory."""name: strunit_price: floatquantity_on_hand: int = 0def total_cost(self) -> float:return self.unit_price * self.quantity_on_hand【Python中dataclass庫】同時,我們也可以添加__init__方法:
def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):self.name = nameself.unit_price = unit_priceself.quantity_on_hand = quantity_on_hand
同時使用dataclass也有一些好處,它比namedtuple更靈活 。同時因為它是一個常規的類,所以你可以享受繼承帶來的便利 。
二、 裝飾器參數參數為python.org/3.9/library/dataclasses.html#dataclasses.dataclass" rel="external nofollow noreferrer">dataclass()