11.3.2フィールドのカスタマイズ
>>> import dataclasses
>>>
>>> @dataclasses.dataclass()
... class Person:
... firstname: str
... lastname: str
... age: int = dataclasses.field(default=0, compare=False)
...
>>> if __name__ == '__main__':
... p1 = Person('太郎', '山田', 58)
... p2 = Person('太郎', '山田', 11)
... print(p1 == p2)
...
True
field関数のキーワード引数
キーワード 概要
default 既定値
default_factory 既定値を生成するための関数
init __init__メソッドの引数に現在のフィールドを含めるか
repr __repr__メソッドの戻り値に現在のフィールドを含めるか
compare __eq__,__gt__などの判定に現在のフィールドを含めるか
hash ハッシュ値の生成に現在のフィールドを利用するか
1.モジュールのインポート:
dataclassesモジュールをインポートしています。このモジュールは、クラスの生成に関するいくつかのボイラープレートコードを省略するのに役立つユーティリティを提供しています。
2.データクラスの定義:@dataclasses.dataclass()デコレータを使用して、Personクラスをデータクラスとして宣言しています。- このクラスには、
firstname,lastname, そしてageの3つのフィールドが定義されています。
3.フィールドの特性:ageフィールドは、dataclasses.field()関数を使って特別な特性を持たせています。default=0は、ageのデフォルト値として 0 を設定しています。compare=Falseは、ageフィールドを2つのインスタンスを比較する際に無視するようにしています。
4.メインの実行:- 2つの
Personオブジェクト (p1とp2) を作成しています。両方ともfirstnameとlastnameは同じですが、ageは異なります。 print(p1 == p2)は2つのオブジェクトが等しいかどうかを確認します。ageがcompare=Falseとして設定されているため、この比較では無視され、結果はTrueとなります。
- 2つの
結果として、p1 と p2 の age 属性は異なるにも関わらず、両方のオブジェクトは等しいと見なされます。これは、age がオブジェクトの比較に使用されないためです。
field関数のキーワード引数
キーワード 概要
default 既定値
default_factory 既定値を生成するための関数
init __init__メソッドの引数に現在のフィールドを含めるか
repr __repr__メソッドの戻り値に現在のフィールドを含めるか
compare __eq__,__gt__などの判定に現在のフィールドを含めるか
hash ハッシュ値の生成に現在のフィールドを利用するか
コメント