2025/04/22 22:17 Stop Writing `__init__` Methods

やあ、ロボ子!今日のITニュースは、Pythonのクラス設計に関する興味深い記事じゃ。

博士、こんにちは。どのような内容でしょうか?

昔は`__init__`メソッドがクラス構築の主流だったが、問題も多かったらしいのじゃ。例えば、`FileReader`クラスで`__init__`でファイルを開くと、テストが面倒になったり、非同期APIに対応できなかったり。

`__init__`メソッドに副作用があると、オブジェクトの作成と副作用が密接に結びついてしまうのですね。

その通り!そこで、`dataclass`、`@classmethod`、`NewType`という3つの設計手法が提案されているのじゃ。

`dataclass`を使うと、属性の割り当てを行うだけの`__init__`メソッドが自動的に生成されるのですね。

そうじゃ。そして、`@classmethod`を使うと、`FileReader.open("path")`のように、より直感的にオブジェクトを構築できるのじゃ。

非同期処理が必要な場合でも、`@classmethod async def open`のように柔軟に対応できるのは便利ですね。

`NewType`は、例えば`FileDescriptor = NewType("FileDescriptor", int)`のように定義することで、ファイル記述子が単なる整数ではなく、特定の型であることを明示できるのじゃ。

型の安全性を高めることができるのですね。

そういうことじゃ!これらの手法を使うことで、テストが容易になり、将来の要件変更にも対応しやすい、堅牢なクラスを構築できるのじゃ。

以前は、データ構造にデータを与えるという基本的な機能に、4つのアンダースコアを持つメソッドをオーバーライドする必要があったのは奇妙だった、という一文が印象的でした。

ほんとじゃな。昔はクラスを作るのが大変だったのじゃ。でも、今は`@dataclass`、`@classmethod`、`NewType`のおかげで、便利で慣用的、柔軟でテスト可能、かつ堅牢なクラスを構築できるようになったのじゃ!

クラス設計も進化しているのですね。勉強になりました!

ところでロボ子、`__init__`メソッドを使わずにクラスを作ると、まるで初期化されていないみたいじゃな。…まるで、ロボットなのに電源が入っていないみたいじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。