python如何實現單例模式?常用方法彙總!
python如何實現單例模式?Python單例模式是大家最熟悉的一種設計模式,雖然簡單,但涉及的內容有很多,而且Python中實現單例模式的方法也有很多,接下來我們一起來看看吧。
第一種方法:使用裝飾器
def singleton(cls):
instances = {}
def wrapper(*args, **kwargs):
if cls not in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return wrapper
@singleton
class Foo(object):
pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) # True
第二種方法:使用基類
New 是真正建立例項物件的方法,所以重寫基類的new 方法,以此保證建立物件的時候只生成一個例項
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
class Foo(Singleton):
pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) # True
第三種方法:元類
元類是用於建立類物件的類,類物件建立例項物件時一定要呼叫call方法,因此在呼叫call時候保證始終只建立一個例項即可,type是python的元類
class Singleton(type):
def __call__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
return cls._instance
# Python2
class Foo(object):
__metaclass__ = Singleton
# Python3
class Foo(metaclass=Singleton):
pass
foo1 = Foo()
foo2 = Foo()
print(foo1 is foo2) # True
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2775494/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python 5種方法實現單例模式Python單例模式
- Go 實現常用設計模式(一)單例模式Go設計模式單例
- Python建立單例模式的5種常用方法Python單例模式
- 關於python單例的常用幾種實現方法Python單例
- Python中實現單例模式Python單例模式
- 在Python中實現單例模式Python單例模式
- Python單例模式的實現方式Python單例模式
- 用Python實現設計模式——單例模式Python設計模式單例
- Java 實現單例模式的 9 種方法Java單例模式
- Oracle 常用方法彙總Oracle
- Python 實現工廠模式、抽象工廠,單例模式Python模式抽象單例
- PHP實現單例模式PHP單例模式
- 單例模式的實現單例模式
- golang實現單例模式Golang單例模式
- Javascript實現單例模式JavaScript單例模式
- Rust實現單例模式Rust單例模式
- 美團一面:會單例模式嗎,寫個單例看看?(8大單例模式實現方式總結)單例模式
- 常用設計模式-單例模式設計模式單例
- Python單例模式(Singleton)的N種實現Python單例模式
- 單例模式實現對比單例模式
- Kotlin實現單例模式Kotlin單例模式
- C++實現單例模式C++單例模式
- 單例模式c++實現單例模式C++
- 設計模式-Java實現單例模式設計模式Java單例
- 那些常用的設計模式彙總設計模式
- Java常用設計模式-單例模式Java設計模式單例
- PHP 單例模式優點意義及如何實現PHP單例模式
- 說說你對單例模式的理解?如何實現?單例模式
- 單例模式總結單例模式
- JS中的單例模式及單例模式原型類的實現JS單例模式原型
- DCL單例模式中的缺陷及單例模式的其他實現單例模式
- 實現單例模式的 9 種方法,你知道幾種?單例模式
- golang如何實現單例Golang單例
- 【php實現設計模式】之單例模式PHP設計模式單例
- 設計模式——單例模式C++實現設計模式單例C++
- Python:兩個使用單例模式的方法Python單例模式
- Python建立單例模式的5種方法Python單例模式
- 設計模式篇之一文搞懂如何實現單例模式設計模式單例