23 lines
806 B
Python
23 lines
806 B
Python
"""Singleton pattern implementation in Python.
|
|
This implementation is thread-safe and
|
|
ensures that only one instance of the class is created.
|
|
|
|
Singleton が提供するのは「同じインスタンスを返す仕組み」
|
|
* __init__() は毎回呼ばれる(多くの人が意図しない動作)
|
|
* __init__の2回目は_initialized というフラグは 使う側で管理する必要がある。
|
|
"""
|
|
|
|
import threading
|
|
|
|
|
|
class Singleton(object):
|
|
_instances = {}
|
|
_lock = threading.Lock()
|
|
|
|
def __new__(cls, *args, **kwargs):
|
|
if cls not in cls._instances:
|
|
with cls._lock:
|
|
if cls not in cls._instances: # ダブルチェック
|
|
cls._instances[cls] = super(Singleton, cls).__new__(cls)
|
|
return cls._instances[cls]
|