簡體   English   中英

Python中的單例模式

[英]Singleton Pattern In Python

我是Python的新手,我想通過檢查並創建Python設計模式示例來學習這種語言。

我對Singleton Pattern的經典實現感到困惑。 那里的大多數文章都提到將Singleton實現為經典

class Singleton(object):
    name = None

    @staticmethod
    def instance():
        if '_instance' not in Singleton.__dict__:
            Singleton._instance = Singleton()

        return Singleton._instance


s1 = Singleton().instance();
s2 = Singleton().instance();

assert s1 is s2

但是我對這種實現方式並不完全信服,因為在任何地方我們都不能限制用戶創建Singleton類的多個對象,並且我仍然可以通過調用Singleton()來創建此類的實例。 在Java中,我們通過將類的構造函數設置為Private來防止這種情況。

有人指出我的另一個實現是

class Singleton(object):
    _instances = {}

    def __new__(class, *args, **kwargs):
        if class not in class._instances:
            instance = super().__new__(class)
            class.__instances[class] = instance
        return class._instances[class]

這使我頭昏了頭腦。 有人可以解釋一下這是怎么回事嗎?

首先要記住的是Python不是Java 它不像其他語言那樣嚴格。 正如Guido所說,“我們都是成年人”。 沒有什么真正阻止您使用Python執行大多數操作的。 解決的辦法是“不要那樣做”。

但是,有幾種方法可以做單身人士。 對用戶來說看起來更“自然”的另一種方法是使用看起來像類實例化的工廠函數。 這是一個例子。

class _Singleton:
    _instance = None

    def hello(self):
        print("Hello!")


def Singleton():
    if _Singleton._instance is None:
        _Singleton._instance = _Singleton()
    return _Singleton._instance



s1 = Singleton()
s2 = Singleton()

assert s1 is s2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM