簡易なSingleton
一度だけインスタンスを作りたいクラス、いわゆるSingletonパターンですが通常Pythonで書く場合はクラスメソッドをつかったりゴニョゴニョするのですが、Djangoのソース見てたら簡易パージョンがありました。
厳密な意味ではSingletonではないのですが十分かと思います。
In [1]: class dummy(object):pass
...:
In [2]: s = dummy()
In [3]: s.hoge = "hoge"
In [4]: s.fuga = 123
In [5]: del dummy
In [6]: ss = dummy()
---------------------------------------------------------------------------
exceptions.NameError Traceback (most recent call last)
NameError: name 'dummy' is not defined
ダミークラスをインスタンス化したあと、クラスをdelで消してます。 インスタンスsはこの通り普通に使えます。
[7]: s.hoge
Out[7]: 'hoge'
In [8]: s.fuga
Out[8]: 123
もっとも本当にクラスが消された訳じゃないのでこうすればインスタンスを作れます。
In [9]: ss = s.__class__()
In [10]: type(ss)
Out[10]: <class '__main__.dummy'>
こーいうのは配列のreverseに[::-1]とやるくらい当たり前なことなのですかね?
perm link: /blog/entry/singleton/