Python 中的資料類 (dataclasses)
dataclasses 是 Python 標準庫中從 3.7 版本開始新增的一個模組。它定義了 @dataclass 裝飾器,該裝飾器會自動為使用者定義的類生成建構函式魔法方法 __init__()、字串表示方法 __repr__()、過載 == 運算子的 __eq__() 方法(以及其他一些方法)。
dataclass 裝飾器具有以下簽名
dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
所有引數都採用布林值,指示是否自動生成相應魔法方法。
“init” 引數預設為 True。它將自動為類生成 __init__() 方法。
讓我們使用 dataclass 裝飾器定義 Student 類,如下所示
from dataclasses import dataclass @dataclass class Student(object): name : str age : int percent : float
自動生成的 __init__() 方法類似於
def __init__(self, name: str, age: int, percent: float): self.name = name self.age = age self.percent = percent
如果類顯式定義了 __init__() 方法,則忽略 init 引數。
repr 引數也預設為 true。因此,__repr__() 方法將自動生成。__repr__() 是物件的正式字串表示形式。如果類已定義 __repr__(),則忽略此引數。
eq 引數預設為 true。這將自動生成 __eq__() 方法。此方法在響應等於比較運算子 (==) 時被呼叫。同樣,如果類已定義 __eq__(),則忽略此引數。
如果 “order” 引數為 true(預設值為 False),則將自動生成用於比較的魔法方法 __lt__()、__le__()、__gt__() 和 __ge__() 方法,它們分別實現比較運算子 < <= > 和 >=。如果 order 為 true 且 eq 為 false,則會引發 ValueError。如果類已定義任何這些方法,則會導致 TypeError。
unsafe_hash 引數如果為 False(預設值),則根據 eq 和 frozen 的設定生成 __hash__() 方法。
frozen 引數:如果為 true(預設為 False),則模擬只讀凍結例項。
>>> from data_class import Student
>>> s1=Student('Naveen', 21, 50.50)
>>> s2=Student('Mangesh', 20, 50.00)
>>> s1==s2
Falseasdict()
此函式將類例項轉換為字典物件。
>>> import dataclasses
>>> dataclasses.asdict(s1)
{'name': 'Naveen', 'age': 21, 'percent': 50.5}astuple()
此函式將類例項轉換為元組物件。
>>> dataclasses.astuple(s2)
('Mahesh', 20, 50.0)make_dataclass()
此函式根據作為 fields 引數給出的元組列表建立新的 dataclass。
>>> NewClass=dataclasses.make_dataclass('NewClass', [('x',int),('y',float)])
>>> n = NewClass(10,20)
>>> n
NewClass(x=10, y=20)
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP