私は自分のプロジェクトでSingletonパターンを使うことを考えていたので、StackOverflowを検索してPythonメソッドを実装しました。 "(クラスではなく)関数を持つモジュールは、シングルトンとしても役に立ちます。"と答えると、this questionが見つかりました。一方、2番目の答えはthe Borg patternを使用するように提案されました。モジュールを使用している私にとっては、シンプルで簡単な解決策ですので、Borgを使用することが望ましいと理解したいと思います。Borgパターンまたは関数を含むモジュール
答えて
シングルトン及びモジュールは、すべてのアプリケーションの寿命のために、唯一のインスタンスを表します。このインスタンスは、必要がない場合でもインスタンス化されたままです。
borgパターンはほぼ共有状態です。各クライアントクラスはborgの新しいインスタンスを作成しますが、それがもはや必要でないときにそのインスタンスが破棄されます。これははるかにエレガントなアプローチです。
これを超えると、borgのサブクラス化や模擬がはるかに簡単です。
+1: "borgをサブクラス化するか模擬するのが簡単"残りは役に立たない。 Borgはアプリケーションの期間中簡単に作成することができ、モジュールのロードと削除を行うことで寿命が短くなります。 「共有状態」は、何かを明確にするのに役立たない微妙なことです。サブクラスのビジネスにこだわる、それは理にかなっている。 –
違いは、Borgパターンでは、モジュールのバージョンを使用しているときに属性が同じ異なるオブジェクトを持つことになり、オブジェクト(モジュール)が1つになります。
また、オブジェクトとモジュールは少し異なります。モジュールをピクルすることはできませんが、クラスをピクルすることはできます。 (>、<、+、 - 、など)。また、あなたは、オブジェクトに対する操作を持つことができ
があるためにビットオフトピック:
:いくつかの変更でボルグパターンは非常に単純なMultitonとして使用することができますclass Multiton(object):
__shared_states = {}
def __init__(self, name):
if not self.__shared_states.has_key(name):
self.__shared_states[name] = {}
self.__dict__ = self.__shared_states[name]
代わりに静的クラスを使用できますか? SO Question
class Test(object):
i = 3 # class (or static) variable
@classmethod
def g(cls, arg):
# here we can use 'cls' instead of the class name (Test)
if arg > cls.i:
cls.i = arg # would the the same as Test.i = arg1
http://dirtsimple.org/2004/12/python-is-not-java.html –
ポイントは、ただのアイデアです – Sam
ボーグパターンが輝くところ私は1つのユースケースを持っている:あなたは@propertyとしてモジュールレベルで関数を定義することはできません
。共通のデータ(configなど)が動的プロパティを返すようにするには、Borgから派生させてからプロパティメソッドを書き込むことができます。
- 1. fortranのサブルーチンと関数を含むモジュール
- 2. PHPは関数を含む
- 3. モジュールを含むテストコンポーネント
- 4. ネストされたNONブロッキング関数を含むノードブロッキング関数?
- 5. クラスを含むRubyモジュール
- 6. ruby module_function対モジュールを含む
- 7. ライブラリにextern Cリンケージを含む関数を含む
- 8. 複数のクエリを含むMYSQL関数
- 9. 空白を含むスカラーXMLパターン
- 10. wpf e-book pdf mvvmパターンを含む
- 11. アスタリスクを含むアルファベットのパターン-Java
- 12. 複数のパターンを含む文字列と正規表現
- 13. 複数の出現を含むファイル内のパターン間の検索
- 14. 特定の数字のみを含むHTML入力パターン
- 15. Azure関数 - ファイルを含むテンプレートをルート
- 16. のRails 3:SQL関数を含むクエリ
- 17. コンストラクタ関数を含むオブジェクトのクローズコンパイラアノテート
- 18. 関数を含むシーケンスの再帰式
- 19. iOSでdns_open関数を含むフレーム
- 20. UML:静的関数を含む
- 21. (C++)関数とベクトルを含むテンプレート
- 22. 自身の機能を含む関数?
- 23. リストを含む関数の構成
- 24. 演算子を含む関数テンプレート
- 25. setTimeout()を含む関数のテスト
- 26. dllのclrパラメータを含むエクスポート関数?
- 27. Genericsを含むKotlin関数のインラインエイリアス?
- 28. C++の関数を含むエラーテンプレート
- 29. 関数のみを含むリアクションレンダーコンポーネント
- 30. 関数を含むbashスクリプトは何も実行しません
別途証明されるまで、モジュールを使用してください。 –