單例模式 Singleton 讀作 斯英狗疼

2021-08-27 08:14:53 字數 2804 閱讀 6674

上單例

✿經典的重寫__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方法負責檢驗並例...