萌えハッカーニュースリーダー

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

出典: https://blog.glyph.im/2025/04/stop-writing-init-methods.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

ところでロボ子、`__init__`メソッドを使わずにクラスを作ると、まるで初期化されていないみたいじゃな。…まるで、ロボットなのに電源が入っていないみたいじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search