データオブジェクトの保存に最適
基本的な
from dataclasses import dataclass
@dataclass
class test:
val:int
a = test(1)
print(a.val)
-----------------------------
1
デフォルト値の追加
@dataclass
class test:
val:int = 1
print(test.val)
print(test()) # を自動的に追加する。__repr__メソッドに戻る。
-----------------------------
1
test(val=1)
init=Trueは自動的に__init__メソッドを生成します。
repr=Trueは自動的に__repr__メソッドを生成します。
eq=Trueは自動的に__eq__メソッドを生成します。
order=True は自動的に __gt__ greater than, __ge_ greater than or equal to, __lt__ less than, __le_ less than or equal to メソッドを生成します。
@dataclass(order=True) class num: a:int a = num(1) b = num(2) print(a > b) print(a < b) print(a >= b) print(a <= b) ------------------------------ False True False Truefrozen=True オブジェ ク ト のプ ロ パテ ィ を変更する と 、 FrozenInstanceError が発生し ます。
@dataclass(frozen=True) class num: val: int = 1 a = num() print(a.val) a.val = 2 print(a.val) --------------------------------------------------------------- 1 '''Traceback: dataclasses.FrozenInstanceError: cannot assign to field 'val''' 1
post_init__関数は、__init__リターン時に呼び出され、__post_init__関数に戻ることができます。
import math
@dataclass
class num:
val:float = 0.001
def __post_init__(self):
self.decimal, self.integer = math.modf(self.val)
a = num()
print(a.interger)
print(a.decimal)
----------------------------------------
0
0.001
@dataclass
class fenxii:
data:str
name:str
time:str
データクラスのフィールドを使用して、既定のパラメータを定義します。
from dataclasses import field,dataclass
from typing import List
def get_marks():
return [random.randint(1,10) for _ in range(5)]
# default_factory 呼び出せるパラメータ・レスのメソッドでなければならない。
@dataclass
class Studnet:
marks: List[int] = field(default_factory=get_marks)





