国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python3.7 dataclass使用指南小結(jié)

2020-02-16 01:20:48
字體:
供稿:網(wǎng)友

dataclass簡介

dataclass的定義位于PEP-557,根據(jù)定義一個dataclass是指“一個帶有默認(rèn)值的可變的namedtuple”,廣義的定義就是有一個類,它的屬性均可公開訪問,可以帶有默認(rèn)值并能被修改,而且類中含有與這些屬性相關(guān)的類方法,那么這個類就可以稱為dataclass,再通俗點講,dataclass就是一個含有數(shù)據(jù)及操作數(shù)據(jù)方法的容器。

乍一看可能會覺得這個概念不就是普通的class么,然而還是有幾處不同:

1.相比普通class,dataclass通常不包含私有屬性,數(shù)據(jù)可以直接訪問
2.dataclass的repr方法通常有固定格式,會打印出類型名以及屬性名和它的值
3.dataclass擁有__eq__和__hash__魔法方法
4.dataclass有著模式單一固定的構(gòu)造方式,或是需要重載運算符,而普通class通常無需這些工作

基于上述原因,通常自己實現(xiàn)一個dataclass是繁瑣而無聊的,而dataclass單一固定的行為正適合程序為我們自動生成,于是dataclasses模塊誕生了。

配合類型注解語法,我們可以輕松生成一個實現(xiàn)了__init__,__repr__,__cmp__等方法的dataclass:

from dataclasses import dataclass@dataclassclass InventoryItem:  '''Class for keeping track of an item in inventory.'''  name: str  unit_price: float  quantity_on_hand: int = 0  def total_cost(self) -> float:    return self.unit_price * self.quantity_on_hand

同時使用dataclass也有一些好處,它比namedtuple更靈活。同時因為它是一個常規(guī)的類,所以你可以享受繼承帶來的便利。

dataclass的使用

我們分x步介紹dataclass的使用,首先是如何定義一個dataclass。

定義一個dataclass

dataclasses模塊提供了一個裝飾器幫助我們定義自己的數(shù)據(jù)類:

@dataclassclass Lang:  """a dataclass that describes a programming language"""  name: str = 'python'  strong_type: bool = True  static_type: bool = False  age: int = 28

我們定義了一個描述某種程序語言特性的數(shù)據(jù)類——Lang,在接下來的例子中我們都會用到這個類。

在數(shù)據(jù)類被定義后,會根據(jù)給出的類型注解生成一個如下的初始函數(shù):

def __init__(self, name: str='python',      strong_type: bool=True,      static_type: bool=False,      age: int=28):  self.name = name  self.strong_type = strong_type  self.static_type = static_type  self.age = age

可以看到初始化操作都已經(jīng)自動生成了,讓我們試用一下:

>>> Lang()Lang(name='python', strong_type=True, static_type=False, age=28)>>> Lang('js', False, False, 23)Lang(name='js', strong_type=False, static_type=False, age=23)>>> Lang('js', False, False, 23) == Lang()False>>> Lang('python', True, False, 28) == Lang()True            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 中西区| 东港市| 平和县| 犍为县| 运城市| 凭祥市| 新巴尔虎左旗| 福贡县| 河北区| 视频| 密山市| 康保县| 衢州市| 屏山县| 衡南县| 曲沃县| 贵州省| 荣昌县| 社会| 九寨沟县| 南华县| 乌海市| 安吉县| 吉首市| 通州区| 南阳市| 六枝特区| 大荔县| 桃园县| 监利县| 淳化县| 嘉峪关市| 凤翔县| 浦城县| 石屏县| 靖州| 吴旗县| 肥东县| 襄汾县| 渭源县| 西吉县|