1. 程式人生 > 實用技巧 >分享兩種 Python 中的單例模式

分享兩種 Python 中的單例模式

中心思想 : 在例項之前判斷 該類的屬性有沒有被例項化過。 如果沒有就例項話, 有的話就返回上一次例項話

第一種: 通過 python 自帶的 __new__ 去實現

import threading
class Singleton(object):
    _instance_lock = threading.Lock()
    def __init__(self):
        pass


    def __new__(cls, *args, **kwargs):
        if not hasattr(Singleton, "_instance"):
            with Singleton._instance_lock:
                
if not hasattr(Singleton, "_instance"): Singleton._instance = object.__new__(cls) return Singleton._instance obj1 = Singleton() obj2 = Singleton() print(obj1,obj2)

第二種: 通過裝飾器

def Sing(cls):
    _instance = {}
    def _sig(*args, **kwargs):
        if cls not in _instance:
            _instance[cls] 
= cls(*args, **kwargs) return _instance[cls] return _sig @Sing class A: def __init__(self): self.x = 1 a1 = A() a2 = A() print(a1, a2)

轉載部落格:https://www.cnblogs.com/huchong/p/8244279.html