同じクラスの同一のインスタンスを生成するための Python 構文糖衣?

WBOY
リリース: 2024-02-08 23:12:26
転載
635 人が閲覧しました

同じクラスの同一のインスタンスを生成するための Python 構文糖衣?

質問の内容

次のような単純なクラスがあるとします。 リーリー

および次の例:

リーリー

しかし、

nameid なので、モジュールのユーザーが person コンストラクターを呼び出すことなく、これらの人々の複数のインスタンスを作成できるようにしたいと考えています。 1 つの場所でのみ宣言する必要があります。

オプション:

  1. copy または deepcopy を使用します。これで必要な機能が提供されますが、tom を使用するたびに、忘れずに彼のコピーを作成する必要があります。これはかさばりすぎます。

  2. tom クラスを作成します

  3. リーリー
これは、新しい

tom が必要になるたびに tom() を実行するだけで済むので、少しすっきりしますが、これには多くのコードを記述する必要があり、あまり効率的ではありません。ドライ。

この種のことを簡単にするPythonの糖衣構文は他にありますか?


正解


これは、ファクトリ/レジストリ タイプ パターンの良い使用例だと思います。このアイデアは、クラス用の代替の便利なコンストラクターと、指定されたタグに対応する構成を保存する単一のレジストリ ディクショナリを実装することです。次の例を見てください:

リーリー

これで、

person クラスをインポートして短いタグからインスタンスを作成できるようになり、実際のデータは 1 か所 (person_registry ディクショナリ) に保存されます。冗長性を減らしたい場合は、次のこともできます。 位置引数を使用しますが、キーワード引数の方がより明示的であるため、多くの場合好まれます (Python の zen)。

このパターンの利点は、実際にスケーラブルであることです。したがって、ユーザーは

person_registry 辞書を拡張できます。例: リーリー

これがお役に立てば幸いです。

以上が同じクラスの同一のインスタンスを生成するための Python 構文糖衣?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート