上單例
✿經典的重寫__new__
方法實現單例✿
class
singleton
(object):
def__new__
(cls, *args, **kwargs):
ifnot hasattr(cls, "_instance"):
cls._instance = super(singleton, cls).__new__(cls, *args, **kwargs)
return cls._instance
✿使用元類type
實現單例✿
class
singleton
(type):
def__init__
(cls, *args, **kwargs):
cls.__instance = none
super(singleton, cls).__init__(*args, **kwargs)
def__call__
(cls, *args, **kwargs):
if cls.__instance is
none:
cls.__instance = super(singleton, cls).__call__(*args, **kwargs)
return cls.__instance
class
useclass
(metaclass=singleton):
# metaclass= 為 python3的寫法
# __metaclass__ = singleton # __metaclass__ 為 python2的寫法
pass
✿裝飾器
方式實現單例✿
def
singleton
(cls, *args, **kwargs):
instances = {}
def_singleton
():if cls not
in instances:
instances[cls] = cls(*args, **kwargs)
return instances[cls]
return _singleton
@singleton
class
useclass
(object):
pass
✿附: 以上三種的校驗.✿
if __name__ == '__main__':
s1 = useclass()
s2 = useclass()
print(id(s1)) # 140365945542080
print(id(s2)) # 140365945542080
print(s1 == s2) # true
print(s1 is s2) # true
✿匯入
建立好的物件✿
# a.py
class
useclass
(object):
# 在a.py中建立好要成為單例的物件.
pass
uc = useclass()
# b.py
from a import uc # 匯入已經a中已經建立好的物件
print(id(uc))
# c.py
from a import uc # 匯入已經a中已經建立好的物件
print(id(uc))
✿兩個物件使用同乙個__dict__
(目前沒發現有什麼特別的用處…)✿
class
singleton
(object):
_state = {}
def__new__
(cls, *args, **kwargs):
obj = super(singleton, cls).__new__(cls, *args, **kwargs)
obj.__dict__ = obj._state
return obj
class
useclass
(singleton):
pass
uc1 = useclass()
uc2 = useclass()
print(id(uc1)) # 140520618571536
print(id(uc2)) # 140520618595384
print(id(uc1) == id(uc2)) # false
print(uc1.__dict__) # {}
print(uc2.__dict__) # {}
print(id(uc1.__dict__) == id(uc2.__dict__)) # true
本系列為博主學心得與體會,所有內容均為原創(✿◡‿◡)我的****:email–> [email protected]生活嘛~ 最重要的就是開心嘍~ o(∩_∩)o~~ Singleton 單例 模式
singleton 模式的宗旨在於確保某個類只有乙個例項,別且為之提供乙個全域性訪問點。為了防止其他工作人員例項化我們的類,可以為該類建立唯一乙個構造器,並將構造器的可見 設定為私有。值得注意的是,如果我們建立了其他的非私有的構造器,或者根本沒有為該類提 供構造器,那麼其他人員還是能例項化我們的類。...
Singleton 單例 模式
今天看了,單例模式。感覺他的本質就是,控制類例項的個數。特例就是,控制static變數的唯一性,保證各個程式共享著同一例項。乙個例子 package singleton description 這是乙個單例模式的使用demo author kyle goal 實現乙個類僅有乙個例項 singleto...
單例(Singleton)模式
單例模式的特點 singleton模式包含的角色只有乙個,那就是singleton。singleton擁有乙個私有建構函式,確保使用者無法通過new取得singleton的例項。除此之外,該模式中包含乙個靜態私有成員變數instance與靜態公有方法instance。instance方法負責檢驗並例...