質問: 今、私はB案のほうがバグが起こりにくく、安全であるように感じています。 `@dataclass(frozen=True)`と書き加えようものなら、非常に安全だと思います。 一方で、冗長であるようにも感じています。また、どことなくPythonらしくない気もしています。 また、個人的には、B案の設計をあまり見ないように思います。 やはり、A案のほうがPythonのコードらしいのでしょうか?
回答: 場合によります。 Player なら A 案じゃないですかね。 一歩移動するたびに新しいインスタンスを作ってステータスを丸々コピーしていたのでは、パフォーマンスも悪くなるし、他のオブジェクトがプレイヤーオブジェクトの参照を持てなくなります。 イミュータブルなオブジェクトはもっと簡単な構造のオブジェクトに適します。たとえばプレイヤーの保持する位置オブジェクトをイミュータブルにするのもいいでしょう。