[英]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.