一雪猪、單例模式
new與init的區(qū)別:
__new:創(chuàng)建實例對象時調(diào)用的構(gòu)造方法
init:初始化方法,用于設置實例的相關(guān)屬性
python創(chuàng)建實例時,會先調(diào)用new構(gòu)造方法摊求,然后使用init進行實例初始化嘉抓。
我們可以通過new來影響實例的創(chuàng)建索守,從而實現(xiàn)單例。
class A(object):
__instance = None
def __new__(cls,*args,**kwargs):
if not cls. __instance:
cls.__instance = super().__new__(cls,*args,**kwargs)
return cls.__instance
a = A()
b = A()
print(a == b)
print(id(a) == id(b))
上面代碼中抑片,聲明了一個私有類變量__instance,當__instance不為None時卵佛,代表系統(tǒng)中已有實例,直接返回該實例敞斋,若__instance為None時截汪,表示系統(tǒng)中還沒有該類實例,則創(chuàng)建新實例并返回植捎。