内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

單例的實(shí)現(xiàn)方式-創(chuàng)新互聯(lián)

單例的實(shí)現(xiàn)方式:
1、基于類

#encoding=utf-8
class Singleton(object):

    def __init__(self):
        pass

    @classmethod
    def instance(cls, *args, **kwargs):
        if not hasattr(Singleton, "_instance"):
            Singleton._instance = Singleton(*args, **kwargs)
        return Singleton._instance

s1 = Singleton.instance()
s2 = Singleton.instance()

print(s1 is s2)

支持多線程:
#encoding=utf-8
import threading

class Singleton(object):
    _instance_lock = threading.Lock()

    def __init__(self):
        pass

    @classmethod
    def instance(cls, *args, **kwargs):
        if not hasattr(Singleton, "_instance"):#
            with Singleton._instance_lock:#枷鎖
                if not hasattr(Singleton, "_instance"):
                    Singleton._instance = Singleton(*args, **kwargs)
        return Singleton._instance

def task(arg):
    obj = Singleton.instance()
    print(obj)

for i in range(10):
    t = threading.Thread(target=task,args=(i,))
    t.start()

obj = Singleton.instance()
print(obj)

2、利用__new__()
#encoding=utf-8

class Singleton(object):

    def __init__(self):
        pass

    def __new__(cls,*args,**kwargs):
        if not hasattr(cls,"_instance"):
            cls._instance = object.__new__(cls)
        return cls._instance

p1 = Singleton()
p2 = Singleton()
print(p1 is p2)

支持多線程方式

#encoding=utf-8
import threading

class Singleton(object):

    _instance_lock = threading.Lock()

    def __init__(self):
        pass

    def __new__(cls,*args,**kwargs):
        if not hasattr(cls,"_instance"):
            with cls._instance_lock:
                if not hasattr(cls,"_instance"):
                    cls._instance = object.__new__(cls)
        return cls._instance

def task():
    obj = Singleton()
    print(obj)

for i in range(20):
    t = threading.Thread(target=task,args=())
    t.start()

3、利用裝飾器
#encoding=utf-8
import threading

def Singleton(cls):

    _instance = {}

    def _singleton(*args,**kwargs):
        if cls not in _instance:
            _instance[cls] = cls(*args,**kwargs)
        return _instance[cls]

    return _singleton

@Singleton
class Person(object):#Person = Singleton(Person)
    a =  10

    def __init__(self,x=0):
        self.x = x

p = Person(2)#_singleton(2)
p2 = Person(3)

print(p is p2)

print(p.x)
print(p2.x)

示例1:
#encoding=utf-8
class Person(object):
    __instance = None#定義一個(gè)類變量,用于綁定實(shí)例對(duì)象
    def __init__(self,name,age):
        self.name = name
        self.age = age

    @classmethod
    def get_instance(cls,name,age):
        if cls.__instance == None:
            cls.__instance =Person(name,age)
        return cls.__instance

    def get_info(self):
        return self.name + ":" + str(self.age)

p1 = Person.get_instance("xxx",20)

p2 = Person.get_instance("yyy",50)

print(p1 is p2)

print(p1.get_info())
print(p2.get_info())

#此種實(shí)現(xiàn)方式無(wú)法在生成實(shí)例后改變實(shí)例變量的值

示例2:
#encoding=utf-8
class Singleton(object):
    _instance = None

    def __new__(cls,a,b,*args,**kwargs):
        if cls._instance == None:
            cls._instance = super(Singleton,cls).__new__(cls,*args,**kwargs)
        return cls._instance

class Person(Singleton):
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def getInfo(self):
        return "姓名: %s,年齡: %s" %(self.name,self.age)

p1 = Person("張三",20)
print(p1.getInfo())

p2 = Person("李四",20)
print(p1.getInfo())

print(p1 is p2)

print("類變量: ",Person._instance)

示例3:
#encoding=utf-8

class Person(object):

    __instance = None#創(chuàng)建一個(gè)類變量用戶存儲(chǔ)類的實(shí)例對(duì)象

    def __init__(self,name,age):

        self.name = name
        self.age = age

    def __new__(cls,name,age):#自定義Person自己的__new__()方法用于產(chǎn)生實(shí)例對(duì)象,此處需要傳入name,age兩個(gè)參數(shù)
        if cls.__instance == None:#保證實(shí)例對(duì)象__instance只會(huì)被賦值一次,如果之前已經(jīng)創(chuàng)建過(guò)實(shí)例,直接返回之前創(chuàng)建的實(shí)例
            #cls.__instance = super(Person,cls).__new__(cls)
            cls.__instance = object.__new__(cls)#調(diào)用父類的__new__方法創(chuàng)建對(duì)象

        return cls.__instance#返回實(shí)例對(duì)象

    def getInfo(self):

        return "姓名: %s,年齡: %s" %(self.name,self.age)

p1 = Person("h",20)
print(p1.getInfo())

p2 = Person("kkk",30)
print(p1.getInfo())
print(p2.getInfo())

print(p1 is p2)

'''
以上代碼執(zhí)行過(guò)程:
p1 = Person("h",20)
首先調(diào)用__new__方法產(chǎn)生實(shí)例p1,此時(shí)Person的__instance為none所以會(huì)創(chuàng)建一個(gè)對(duì)象,
然后調(diào)用__init__方法,把返回的實(shí)例對(duì)象__instance傳入self中,并初始實(shí)例變量name,age

print(p2.getInfo())
首先調(diào)用__new__方法產(chǎn)生實(shí)例p2,此時(shí)Person的__instance為不為None,為p1,所以會(huì)直接返回對(duì)象p1,
然后調(diào)用__init__方法,把返回的實(shí)例對(duì)象__instance傳入self中,并用新的name,age初始實(shí)例變量name,age 
'''    

如果__init__有其他參數(shù),__new__需要傳入?yún)?shù)

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),化州企業(yè)網(wǎng)站建設(shè),化州品牌網(wǎng)站建設(shè),網(wǎng)站定制,化州網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,化州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

網(wǎng)頁(yè)題目:單例的實(shí)現(xiàn)方式-創(chuàng)新互聯(lián)
文章出自:http://www.rwnh.cn/article30/cejopo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、網(wǎng)站改版網(wǎng)站內(nèi)鏈、品牌網(wǎng)站建設(shè)網(wǎng)站制作、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司
炎陵县| 鲜城| 三亚市| 长顺县| 湄潭县| 桃园县| 大石桥市| 香港| 芒康县| 无极县| 舟曲县| 长兴县| 台山市| 白朗县| 通许县| 广饶县| 安庆市| 玉溪市| 阜康市| 阜城县| 大姚县| 建湖县| 阳泉市| 广汉市| 阳西县| 黄梅县| 垫江县| 察哈| 普洱| 合山市| 莱芜市| 繁昌县| 武定县| 江城| 颍上县| 阿城市| 六盘水市| 和龙市| 东平县| 舟曲县| 孝义市|