python单例模式继承_Python四种实现单例模式的方法
在這之前,先了解super()和__new__()方法
super()方法:
返回一個父類或兄弟類類型的代理對象,讓你能夠調用一些從繼承過來的方法。
它有兩個典型作用:
a. 在單繼承的類層次結構中,super()可用于引用父類而不顯式父類名稱,從而使代碼更易于維護。
b. 在多重繼承中,可以保證公共父類僅被執行一次。
__new__方法:
a.它是一個類級別的靜態方法。通常用于控制生成一個新實例的過程。
b.返回的是一個實例化出來的實例
下面為四種實現單例模式的方法
1. 使用__new__方法
class Singleton(object):
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
orig = super(Singleton, cls)
cls._instance = orig.__new__(cls, *args, **kwargs)
rerurn cls._instance
class A(Singleton):
pass
# 類A即為單例類
2.共享屬性
# 創建實例時把所有實例的__dict__指向同一個字典,這樣它們都具有相同的屬性和方法(類的__dict__存儲對象屬性)
class Singleton(object):
_state = {}
def __new__(cls, *args, **kwargs):
ob = super(Singleton,cls).__new__(cls, *args, **kwargs)
ob.__dict__ = cls._state
return ob
class B(Singleton):
pass
# 類B即為單例類
3.使用裝飾器
def singleton(cls):
instance = {}
def wapper():
if cls not in instance:
instance[cls] = cls(*args, **kwargs)
return instance[cls]
return wapper
@singleton
class C:
pass
# 類C即為單例類
4.import方法
# 作為Python模塊時是天然的單例模式
#創建一個sington.py文件,內容如下:
class Singleton(object):
def foo(self):
pass
mysington = Singleton()
# 運用
from sington import mysington
mysington.foo()
總結
以上是生活随笔為你收集整理的python单例模式继承_Python四种实现单例模式的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hm编码工具使用_H.265视频编码与技
- 下一篇: python字符串创建_在Python上