python3 類的單例模式


class Singleton():
    __instance = None

    def __init__(self):
        print("我是init方法.")

    def __new__(cls):
        if not Singleton.__instance:
            Singleton.__instance = object.__new__(cls)
        return Singleton.__instance


obj1 = Singleton()
obj2 = Singleton()
print(id(obj1), id(obj2))

執行結果:

我是init方法.
我是init方法.
42790640 42790640

 

使用鎖的單例模式

from threading import Lock


l = Lock()


class Singleton():
    __instance = None

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            l.acquire()  # 保證安全
            cls.__instance = object.__new__(cls)
            l.release()  # 保證安全
        return cls.__instance

    def __init__(self):
        pass


s1 = Singleton()
s2 = Singleton()
print(s1, s2)  # 內存相等

 執行結果:

<__main__.Singleton object at 0x000000000292EF28> <__main__.Singleton object at 0x000000000292EF28>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM