PythonにおけるBuilderパターン相当
質問
Javaでは ビルダパターン は、多くのパラメータを持つクラスをインスタンス化するための、より読みやすい手段を提供します。ビルダーパターンでは、名前の付いた属性を設定するメソッドを持つ設定オブジェクトを構築し、それを使って別のオブジェクトを構築します。
Pythonでこれに相当するものは何でしょうか?同じ実装を模倣するのが一番良い方法でしょうか?
どのように解決するのですか?
デザインパターンは、多くの場合、組み込みの言語機能で置き換えることができます。
あなたのユースケース
多くのパラメータを持つクラスをインスタンス化するための、より読みやすい手段"を持ちたかったとありますね。Javaの場合。
Builderパターン不要
しかし、Pythonは 名前付きパラメータ という具合に、クラス・コンストラクタを定義すればよいのです。クラスのコンストラクタを定義すればよいのです。
class SomeClass(object):
def __init__(self, foo="default foo", bar="default bar", baz="default baz"):
# do something
で、名前付きパラメータを使って呼び出す。
s = SomeClass(bar=1, foo=0)
引数の順序を自由に変更したり、省略したりできることに注意してください。
set
メソッドの呼び出しを省略したり並べ替えたりできるのと同じです。
また、Pythonの動的な性質は、オブジェクトの構築に関してより多くの自由を与えてくれます(
__new__
など) を使ってオブジェクトを構築する自由度が高く、ビルダーパターンの他の使い方を置き換えることができます。
しかし、本当に使いたいのであれば
を使うことができます。
collections.namedtuple
を設定オブジェクトとして使用します。
namedtuple()
は、定型クラスを書くことなく、各パラメータが与えられた名前を持つタプルを表す新しい型を返します。生成された型のオブジェクトは、Javaビルダーと同様の方法で使用することができます。(これは
Paul McGuire
に感謝します)。
StringBuilder
関連するパターンとして、Java の StringBuilder があり、これは効率的に (不変の)
String
を段階的に構築するために使用されます。Pythonでは、これは次のように置き換えることができます。
str.join
. 例えば
final StringBuilder sb = new StringBuilder();
for(int i = 0; i < 100; i++)
sb.append("Hello(" + i + ")");
return sb.toString();
は、以下のように置き換えることができます。
return "".join(f"Hello({i})" for i in range(100))
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] Python 言語を決定するには?
-
[解決済み] 単純な文字列からtimedeltaオブジェクトを作成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Builderパターンを使うのはどんなとき?[クローズド]
-
[解決済み】*args と **kwargs の意味は何ですか?[重複しています]
-
[解決済み】Pythonでimmutableオブジェクトを作るには?
-
[解決済み] 効率的なJavaのビルダーパターン
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] Python Logging でログメッセージが2回表示される件
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複