11.3データクラス
(2)イミュータブルなオブジェクトを生成できる
(3)メソッドは自由に追加できる
11.3.1データクラスの基本
① @gataclassデコレーターを付与する
オプション 概要 既定値
init __init__メソッドを自動生成するか True
repr __repl__メソッドを自動生成するか True
eq __eq__メソッドを自動生成するか True
order __lt__,__le__,__gt__,__ge__メソッドを自動生成するか False
unsafe_hash 無条件に__hash__メソッドを自動生成するか False
frozen クラスをイミュータブルするか False
②フィールドを宣言する
構文フィールドの宣言
フィールド名:型[= 既定値]
例?
def __init__(self, firstname: str, lastname: str, age: int = 0): ~
③メソッドを宣言する
④データクラスの初期化と比較
データクラスは、Python 3.7 から導入された新しいクラス定義機構で、主に単純なデータの保持のためのクラスを簡潔に定義できるようにするものです。具体的には、データクラスを使用することで、属性の定義や一般的なメソッド(例:__repr__や__eq__)の自動生成が可能になります。
データクラスを利用するためには、dataclasses モジュールの dataclass デコレータをクラス定義の前に付けます。
(2)イミュータブルなオブジェクトを生成できる
(3)メソッドは自由に追加できる
11.3.1データクラスの基本
>>> import dataclasses ①
>>>
>>> @dataclasses.dataclass(frozen=True)
... class Person:
... firstname: str
... lastname: str
... age: int = 0 ②
... def show(self):
... print(f'私の名前は{self.lastname}{self.firstname}です!') ③
...
>>> if __name__ == '__main__':
... p1 = Person('太郎', '山田', 58)
... p2 = Person('太郎', '山田', 58)
... print(p1)
... print(p1 == p2) ④
...
Person(firstname='太郎', lastname='山田', age=58)
True
>>>
モジュールのインポート:
pythonimport dataclasses- Pythonの
dataclassesモジュールをインポートしています。これは、データクラスの作成を簡易にするためのモジュールです。
- Pythonの
データクラスの定義:
python@dataclasses.dataclass(frozen=True) class Person: firstname: str lastname: str age: int = 0@dataclasses.dataclass(frozen=True)は、Personクラスをデータクラスとして定義するデコレータです。frozen=Trueの部分は、生成されたインスタンスを変更不可能(イミュータブル)にするためのオプションです。firstname,lastname,ageはクラスの属性です。ageにはデフォルトの値として0が設定されています。
メソッドの定義:
pythondef show(self): print(f'私の名前は{self.lastname}{self.firstname}です!')showメソッドは、人物の名前を表示するためのメソッドです。
メインの処理:
pythonif __name__ == '__main__': p1 = Person('太郎', '山田', 58) p2 = Person('太郎', '山田', 58) print(p1) print(p1 == p2)- ここでは
Personクラスの2つのインスタンス、p1とp2を作成しています。両方のインスタンスには同じ値が設定されています。 print(p1)は、p1インスタンスの文字列表現を表示します。dataclassを使用しているため、特別な文字列表現メソッドを定義しなくても、属性の内容が表示されます。print(p1 == p2)は、p1とp2が同じかどうかを確認します。データクラスでは、属性の値がすべて同じ場合、2つのインスタンスは等しいと見なされます。この例ではTrueが返されます
- ここでは
① @gataclassデコレーターを付与する
オプション 概要 既定値
init __init__メソッドを自動生成するか True
repr __repl__メソッドを自動生成するか True
eq __eq__メソッドを自動生成するか True
order __lt__,__le__,__gt__,__ge__メソッドを自動生成するか False
unsafe_hash 無条件に__hash__メソッドを自動生成するか False
frozen クラスをイミュータブルするか False
②フィールドを宣言する
構文フィールドの宣言
フィールド名:型[= 既定値]
例?
def __init__(self, firstname: str, lastname: str, age: int = 0): ~
③メソッドを宣言する
④データクラスの初期化と比較
コメント