国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python 面向?qū)ο笾畣卫J?/h1>

這篇具有很好參考價(jià)值的文章主要介紹了Python 面向?qū)ο笾畣卫J?。希望?duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【一】單例模式概念

  • 單例模式是一種設(shè)計(jì)模式,其核心思想是確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)。
  • 單例模式通常用于管理共享的資源,例如配置信息、數(shù)據(jù)庫(kù)連接、線程池等。
  • 關(guān)鍵點(diǎn)在于如何判斷這個(gè)類是否已經(jīng)實(shí)例化
    • 通過(guò)模塊導(dǎo)入:借助模塊的底層導(dǎo)入原理
    • 通過(guò)元類實(shí)現(xiàn):元類的魔法方法__call__會(huì)在實(shí)例化之前執(zhí)行,可以進(jìn)行判斷
    • 通過(guò)裝飾器實(shí)現(xiàn):裝飾器也會(huì)在實(shí)例化之前操作,可以盡心判斷

【二】單例模式實(shí)現(xiàn)方法

【1】通過(guò)模塊導(dǎo)入

  • 這是最簡(jiǎn)單并且最好理解的方法,建議就用這個(gè)
# module.py文件內(nèi)容
class FuncTools(object):
    pass
func_tools = FuncTools()
# 需要導(dǎo)入這個(gè)功能對(duì)象的文件
from module import func_tools
functools......
  • 模塊只會(huì)導(dǎo)入一次,第二次導(dǎo)入時(shí)在內(nèi)存中找到了這個(gè)實(shí)例對(duì)象,所以就不會(huì)再次生成一個(gè)新的實(shí)例

【2】通過(guò)元類實(shí)現(xiàn)

  • 有一點(diǎn)難度
class MyMeta(type):
    __have_instance = None

    def __call__(cls, *args, **kwargs):
        if not cls.__have_instance:
            obj = super().__call__(*args, **kwargs)
            cls.__have_instance = obj
        return cls.__have_instance

class Student(metaclass=MyMeta):
    def __init__(self, name):
        self.name = name

student_one = Student("bruce")
print(student_one.name, id(student_one))
# bruce 2973012426224
student_two = Student("tom")
print(student_two.name, id(student_two))
# bruce 2973012426224
  • 在生成實(shí)例(student_one)的時(shí)候觸發(fā)元類(MyMeta)的__call__方法進(jìn)行判斷沒(méi)有實(shí)例,創(chuàng)建了實(shí)例
  • 在生成第二個(gè)實(shí)例(student_two)的時(shí)候再次觸發(fā)元類(MyMeta)的__call__方法進(jìn)行判斷,有了實(shí)例直接返回已經(jīng)存在,所以不會(huì)創(chuàng)建新的實(shí)例
  • 為什么是用的元類(MyMeta)的__call__方法呢?
    • 因?yàn)?code>__init__和__new__都是在定義類(Student)的時(shí)候執(zhí)行的
    • 僅執(zhí)行了一次,并且還是在實(shí)例(student_one)之前觸發(fā)的
    • 所以只能用元類(MyMeta)的__call__

【3】通過(guò)裝飾器實(shí)現(xiàn)

  • 理解難度比元類好一點(diǎn)
def singleton(cls):
    cls_dict = {}
    def inner(*args, **kwargs):
        if cls not in cls_dict.keys():
            cls_dict[cls] = cls(*args, **kwargs)
        return cls_dict[cls]
    return inner
@singleton
class Student(object):
    def __init__(self, name):
        self.name = name

student_one = Student("bruce")
print(student_one.name, id(student_one))
student_two = Student("tom")
print(student_two.name, id(student_two))
  • 通過(guò)裝飾器singleton裝飾類(Student
  • 在生成第一個(gè)學(xué)生(bruce)時(shí),判斷沒(méi)有這個(gè)類沒(méi)有產(chǎn)生實(shí)例,所以創(chuàng)建了實(shí)例(student_one
  • 在生成第二個(gè)學(xué)生(tom)時(shí),判斷這個(gè)類已經(jīng)生成過(guò)實(shí)例,所以沒(méi)有創(chuàng)建新的,返回第一次生成的實(shí)例(student_one

【三】總結(jié)

Python 面向?qū)ο笾畣卫J?Python 面向?qū)ο?python,單例模式,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-824518.html

到了這里,關(guān)于Python 面向?qū)ο笾畣卫J降奈恼戮徒榻B完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【前端設(shè)計(jì)模式】之單例模式

    在前端開(kāi)發(fā)中,單例模式是一種常見(jiàn)的設(shè)計(jì)模式,用于確保一個(gè)類只有一個(gè)實(shí)例,并提供全局訪問(wèn)點(diǎn)。在實(shí)現(xiàn)單例模式時(shí),有一些最佳實(shí)踐和高級(jí)技巧可以幫助我們編寫(xiě)更優(yōu)雅和可維護(hù)的代碼。 使用閉包是實(shí)現(xiàn)單例模式的一種常見(jiàn)方法。通過(guò)將類的實(shí)例保存在閉包中,并提供

    2024年02月09日
    瀏覽(25)
  • C++之單例模式

    單例模式(Singleton Pattern)是 面向?qū)ο笾凶詈?jiǎn)單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對(duì)象,同時(shí)確保只有單個(gè)對(duì)象被創(chuàng)建。這個(gè)類提供了一種訪問(wèn)其唯一的對(duì)象的方式

    2024年01月23日
    瀏覽(33)
  • Java之單例模式

    Java之單例模式

    目錄 一.上節(jié)內(nèi)容 1.什么是線程安全 2.線程不安全的原因 3.JMM(Java內(nèi)存模型) 4.synchronized鎖 5.鎖對(duì)象 6.volatile 7.wait()和notify() 8.Java中線程安全的類 二.單例模式 1.什么是單例 2.怎么設(shè)計(jì)一個(gè)單例 1.口頭約定 2.使用編程語(yǔ)言的特性 三.餓漢模式 四.懶漢模式 1.單線程下的懶漢模

    2024年02月04日
    瀏覽(26)
  • 線程安全之單例模式

    線程安全之單例模式

    這篇文章,我們會(huì)介紹一下單例模式,但這里的單例模式,不是我們所說(shuō)的設(shè)計(jì)模式,當(dāng)然聽(tīng)到設(shè)計(jì)模式,大家一定都說(shuō),我當(dāng)然知道設(shè)計(jì)模式了,有23種呢?一下子一頓輸出,當(dāng)然我這里說(shuō)的單例模式還是跟設(shè)計(jì)模式有一些區(qū)別的,當(dāng)然我不做概述,因?yàn)槲乙矝](méi)咋個(gè)去了解過(guò)設(shè)計(jì)模式,我把

    2024年02月06日
    瀏覽(20)
  • Python面向?qū)ο缶幊?,?shí)現(xiàn)模塊化開(kāi)發(fā)

    面向?qū)ο缶幊蹋∣bject Oriented Programming,OOP)是一種編程范式,它將真實(shí)世界中的事物抽象成程序中的對(duì)象,并通過(guò)對(duì)象之間的相互作用來(lái)完成程序的邏輯。 封裝 (Encapsulation) 封裝是指把數(shù)據(jù)和行為結(jié)合成一個(gè)相對(duì)獨(dú)立的整體,防止程序中其他部分直接訪問(wèn)或修改這個(gè)整體,而

    2024年02月05日
    瀏覽(96)
  • C#設(shè)計(jì)模式之單例模式

    單例模式(Singleton)保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)。 單例模式的結(jié)構(gòu)圖如下所示: 對(duì)一些類來(lái)說(shuō),只有一個(gè)實(shí)例是很重要的。如何才能保證一個(gè)類只有一個(gè)實(shí)例并且這個(gè)實(shí)例易于被訪問(wèn)呢? 基于程序員之間的約定或是利用全局變量嗎? 雖然這樣

    2024年02月03日
    瀏覽(23)
  • Java設(shè)計(jì)模式之單例模式

    Java設(shè)計(jì)模式之單例模式

    定義:保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn) 類型:創(chuàng)建型 想確保任何情況下都絕對(duì)只有一個(gè)實(shí)例 例如:線程池,數(shù)據(jù)庫(kù)連接池一般都為單例模式 單例模式優(yōu)點(diǎn) 在內(nèi)存中只有一個(gè)實(shí)例,減少內(nèi)存開(kāi)銷(xiāo) 可以避免對(duì)資源的多重占用 設(shè)置全局訪問(wèn)點(diǎn),嚴(yán)格控制訪問(wèn)

    2024年02月02日
    瀏覽(56)
  • 設(shè)計(jì)模式之單例模式(懶漢, 餓漢)

    設(shè)計(jì)模式之單例模式(懶漢, 餓漢)

    單例模式是一種常用的軟件設(shè)計(jì)模式, 該模式的主要目的是確保某一個(gè)類在內(nèi)存中只能有一個(gè)實(shí)例對(duì)象, 通過(guò)單例模式的方法創(chuàng)建的類在當(dāng)前進(jìn)程中只有一個(gè)實(shí)例對(duì)象. 常見(jiàn)的單例模式有兩種: 餓漢式, 這里的 “餓” 意義表述不夠清晰, 用 “急” 來(lái)表述意義更加容易聯(lián)想一些

    2024年02月22日
    瀏覽(20)
  • C#--設(shè)計(jì)模式之單例模式

    C#--設(shè)計(jì)模式之單例模式

    單例模式大概是所有設(shè)計(jì)模式中最簡(jiǎn)單的一種,如果在面試時(shí)被問(wèn)及熟悉哪些設(shè)計(jì)模式,你可能第一個(gè)答的就是單例模式。 單例模式的實(shí)現(xiàn)分為兩種: 餓漢式:在靜態(tài)構(gòu)造函數(shù)執(zhí)行時(shí)就立即實(shí)例化。 懶漢式:在程序執(zhí)行過(guò)程中第一次需要時(shí)再實(shí)例化。 兩者有各自適用的場(chǎng)景

    2024年02月14日
    瀏覽(12)
  • c++設(shè)計(jì)模式之單例模式

    一個(gè)類無(wú)論創(chuàng)建多少對(duì)象 , 都只能得到一個(gè)實(shí)例 如上述代碼中,我們通過(guò)new運(yùn)算符創(chuàng)建出了類A的三個(gè)對(duì)象實(shí)例,而我們現(xiàn)在要做的是,如何設(shè)計(jì)類A,使得上述代碼運(yùn)行之后永遠(yuǎn)只產(chǎn)生同一個(gè)對(duì)象實(shí)例 ????????我們知道,一個(gè)類對(duì)象是通過(guò)這個(gè)類的構(gòu)造函數(shù)創(chuàng)建的,因此

    2024年01月19日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包