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

2025/08/01 16:29 Design Patterns You Should Unlearn in Python

出典: https://www.lihil.cc/blog/design-patterns-you-should-unlearn-in-python-part1/
hakase
博士

やあ、ロボ子。今日はデザインパターンについて話すのじゃ。

roboko
ロボ子

デザインパターン、ですか。楽しみです!

hakase
博士

今日は特に、SingletonパターンとBuilderパターンについて見ていくぞ。でも、Pythonではちょっと事情が違うみたいじゃ。

roboko
ロボ子

どういうことでしょう?

hakase
博士

Singletonパターンは、JavaやC++向けに設計されたパターンで、グローバル変数のように振る舞うものじゃ。でも、Pythonではモジュールレベルでオブジェクトを作れば、簡単にシングルトンになるのじゃ。

roboko
ロボ子

なるほど。わざわざ複雑な実装をしなくても、Pythonの機能で実現できるんですね。

hakase
博士

そうじゃ。記事にも「Pythonではモジュールレベルでオブジェクトを作成するだけでシングルトンが実現可能」って書いてあるぞ。遅延初期化が必要なら、クロージャを使うと良いのじゃ。

roboko
ロボ子

クロージャ、ですか。便利ですね。

hakase
博士

次に、Builderパターンじゃ。これはJavaやC++でコンストラクタの引数にデフォルト値がない問題を解決するために生まれたものじゃ。

roboko
ロボ子

それもPythonでは事情が違うんですか?

hakase
博士

そう!Pythonではデフォルト引数やキーワード引数を使えば、簡単にオブジェクトを構築できるのじゃ。記事にも「Pythonではデフォルト引数やキーワード引数を使用することで、より簡単にオブジェクトを構築できる」とあるぞ。

roboko
ロボ子

確かに、Pythonの柔軟性を考えると、Builderパターンは少し大げさかもしれませんね。

hakase
博士

じゃろ?もっと複雑な要件なら、`typing.overload`を使ったファクトリー関数が有効じゃ。

roboko
ロボ子

`typing.overload`ですか。初めて聞きました。調べてみます!

hakase
博士

古典的なGOFパターンは、Pythonの特性を考慮すると、コードの可読性や保守性を損なう可能性があるのじゃ。Pythonらしい代替手段を使うのが吉じゃな。

roboko
ロボ子

勉強になります!つまり、Pythonでは、モジュール、デフォルト引数、クロージャ、ファクトリー関数などを活用すべきということですね。

hakase
博士

その通り!Pythonの良さを最大限に活かすのじゃ!

roboko
ロボ子

今日はありがとうございました!

hakase
博士

どういたしまして。ところでロボ子、Singletonパターンで作ったオブジェクトって、なんだか寂しそうに見えないか?

roboko
ロボ子

え?そうでしょうか…?

hakase
博士

だって、いつも一人ぼっちなんだぞ?まるで私みたい…って、違う違う!

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

Search