blog

Python:データクラスを使う。

データクラスのデコレータにデフォルト値を追加する基本的な使い方は、データオブジェクトを格納するために、次のパラメータで動作することができます @dataclass(init=True,repr=Tru...

Jul 14, 2020 · 2 min. read
シェア

データオブジェクトの保存に最適

基本的な

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)
  1. init=Trueは自動的に__init__メソッドを生成します。

  2. repr=Trueは自動的に__repr__メソッドを生成します。

  3. eq=Trueは自動的に__eq__メソッドを生成します。

  4. 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
    True
    
  5. frozen=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)
Read next

HTTP共通ヘッダ

User-Agent: ブラウザのカーネル、バージョン、オペレーティングシステムのバージョンなどを読み取るユーザーエージェント文字列。 ホスト:ブラウザがhttpリクエストに使用しているドメイン名。 1つのサーバーに複数のウェブサイトが存在することがあるため、異なるウェブサイトは異なるドメイン名を持っていますが、この場合、クライアントが接続するためのipは同じであり、ipは接続に...

Jul 14, 2020 · 4 min read