ホームページ >バックエンド開発 >Python チュートリアル >同じクラスの同一のインスタンスを生成するための Python 構文糖衣?

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

WBOY
WBOY転載
2024-02-08 23:12:26664ブラウズ

同じクラスの同一のインスタンスを生成するための 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 までご連絡ください。