上から順に検討するのが良いかも?
■typing.NamedTuple [new in 3.6]
https://docs.python.org/ja/3.11/library/typing.html#typing.NamedTuple
・名前付きの tuple なので軽い
・イミュータブル
・デフォルト値可能
・アンパックで一括で値を設定する事が可能
・多重継承はできない?
※自作メソッドを作れるができる限り作らない方が良い
操作メソッド
_make(iterable), _asdict(), _replace(**kwargs)
※アンダースコア付きだけどprotectedではなくpublic扱いという特殊仕様
■dataclasses.dataclass [new in 3.7]
https://docs.python.org/ja/3.11/library/dataclasses.html#module-dataclasses
・__init__の記述を省略できるクラス
・イミュータブル化も可能
・デフォルト値可能
・アンパックで一括で値を設定する事が可能
・slots=Trueのクラスからの多重継承はできない?
・特殊メソッドの生成の有無を指定できる
※自作メソッドを作れるができる限り作らない方が良い
自作メソッドが必要なら普通のクラスの採用も検討すること
■typing.TypedDict [new in 3.8]
https://docs.python.org/ja/3.11/library/typing.html#typing.TypedDict
・構造が定義できるdict
・デフォルト値は不可能
※dictを使っている既存プロジェクトで使用?
※json関連で使用