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

系統(tǒng)學(xué)習(xí)Python——裝飾器:類(lèi)裝飾器-[初探類(lèi)裝飾器和元類(lèi)]

這篇具有很好參考價(jià)值的文章主要介紹了系統(tǒng)學(xué)習(xí)Python——裝飾器:類(lèi)裝飾器-[初探類(lèi)裝飾器和元類(lèi)]。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

分類(lèi)目錄:《系統(tǒng)學(xué)習(xí)Python》總目錄


函數(shù)裝飾器是如此有用,以至于Python2.X和Python3.X都擴(kuò)展了這一模式,允許裝飾器應(yīng)用于類(lèi)和函數(shù)。簡(jiǎn)而言之,類(lèi)裝飾器類(lèi)似于函數(shù)裝飾器,但它們是在一條class語(yǔ)句的末尾運(yùn)行,并把一個(gè)類(lèi)名重新綁定到一個(gè)可調(diào)用對(duì)象。同樣,它們可以用來(lái)在類(lèi)一創(chuàng)建后就管理它們,或者當(dāng)隨后創(chuàng)建實(shí)例的時(shí)候插人一層包裝邏輯來(lái)管理實(shí)例。代碼結(jié)構(gòu)如下:

def decorator(aClass):
    pass

@decorator
class C:
    pass

被映射為下列等價(jià)代碼:

def decorator(aClass):
    pass

class C:
    pass

C = decorator(C)

類(lèi)裝飾器也可以擴(kuò)展類(lèi)自身,或者返回一個(gè)攔截了隨后的實(shí)例創(chuàng)建調(diào)用的代理對(duì)象。例如,在文章《系統(tǒng)學(xué)習(xí)Python——類(lèi)(class):靜態(tài)方法(staticmethod)和類(lèi)方法(classmethod)-[實(shí)例:用類(lèi)方法計(jì)數(shù)]》的示例中,我們可以使用這個(gè)鉤子來(lái)自動(dòng)地?cái)U(kuò)展需要實(shí)例計(jì)數(shù)器或任何其他所需數(shù)據(jù)的類(lèi):

def count(aClass):
    aClass.numInstances = 0
    return aClass

@count
class Spam:
    pass

@count
class Sub(Spam):
    pass

@count
class Other(Spam):
    pass

事實(shí)上,正如所編寫(xiě)的那樣,該裝飾器可被用于類(lèi)或函數(shù),我們可以在初始化對(duì)象屬性之后,返回在這兩種上下文中定義的對(duì)象:

def count(aClass):
    aClass.numInstances = 0
    return aClass

@count
def spam():
    pass

@count
class Sub:
    pass

@count
class Other:
    pass

print(spam.numInstances)
print(Other.numInstances)

輸出:

0
0

盡管這個(gè)裝飾器管理了一個(gè)函數(shù)或者類(lèi)本身,正如我們將在后面的文章看到的,類(lèi)裝飾器也可以通過(guò)攔截構(gòu)造函數(shù),并將新的實(shí)例對(duì)象包在一個(gè)代理(這個(gè)代理會(huì)部署屬性訪問(wèn)工具來(lái)攔截之后的屬性訪問(wèn)請(qǐng)求)中,來(lái)管理一個(gè)實(shí)例的全部接口,下面是這個(gè)模型的簡(jiǎn)單版本:

def decorator(cls):
    class Proxy:
        def __inir__(self, *args):
            self.wrapper = cls(*args)
        def __getattr__(self, name):
            return getattr(self.wrapper, name)
        
    return Proxy

@decorator
class C:
    pass

X = C()

而元類(lèi)是一種類(lèi)似的基于類(lèi)的高級(jí)工具,其用途往往與類(lèi)裝飾器有所重合。它們提供了一種備選的模型,能把一個(gè)類(lèi)對(duì)象的創(chuàng)建路由到頂級(jí)type類(lèi)的一個(gè)子類(lèi),在一條class語(yǔ)句的最后。為了獲得對(duì)一個(gè)新的類(lèi)對(duì)象創(chuàng)建或初始化的控制,一個(gè)元類(lèi)通常重新定義type類(lèi)的__new__或者__init__方法(這種做法通常用于攔截這兩種方法之一)。最終效果就像類(lèi)裝飾器一樣,定義了在類(lèi)創(chuàng)建時(shí)自動(dòng)運(yùn)行的代碼。在這里,這一步將類(lèi)名綁定到一個(gè)用戶(hù)定義元類(lèi)的調(diào)用結(jié)果。事實(shí)上,一個(gè)元類(lèi)完全可以不必是一個(gè)類(lèi)。我們將探討這種模糊了元類(lèi)與裝飾器之間區(qū)別的可能性,并且甚至比較這兩種工具在許多不同場(chǎng)景中的功能上的等價(jià)性。

類(lèi)裝飾器和元類(lèi)這兩種方案都可以用來(lái)擴(kuò)展一個(gè)類(lèi)或返回一個(gè)任意的對(duì)象來(lái)替代它一一一這是一種幾乎擁有無(wú)限的、基于類(lèi)的定制化可能性的協(xié)議。我們后面會(huì)看到,元類(lèi)也可以定義處理它們實(shí)例類(lèi)的方法,而不是這些實(shí)例類(lèi)的普通實(shí)例一一這是一種和類(lèi)方法很相似的技術(shù),而且可以用類(lèi)裝飾器代理中的方法和數(shù)據(jù)來(lái)模擬實(shí)現(xiàn),或者甚至是一個(gè)返回一個(gè)元類(lèi)實(shí)例的類(lèi)裝飾器。

參考文獻(xiàn):
[1] Mark Lutz. Python學(xué)習(xí)手冊(cè)[M]. 機(jī)械工業(yè)出版社, 2018.文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-827106.html

到了這里,關(guān)于系統(tǒng)學(xué)習(xí)Python——裝飾器:類(lèi)裝飾器-[初探類(lèi)裝飾器和元類(lèi)]的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 【學(xué)習(xí)筆記】Python核心技術(shù)與實(shí)戰(zhàn)-基礎(chǔ)篇-03列表和元組,到底用哪個(gè)?

    【學(xué)習(xí)筆記】Python核心技術(shù)與實(shí)戰(zhàn)-基礎(chǔ)篇-03列表和元組,到底用哪個(gè)?

    列表和元組,都是一個(gè)可以放置任意數(shù)據(jù)類(lèi)型的有序集合。 在絕大多數(shù)編程語(yǔ)言中,集合的數(shù)據(jù)類(lèi)型必須一致。不過(guò),對(duì)于 Python 的列表和元組來(lái) 說(shuō),并無(wú)此要求: 列表是動(dòng)態(tài)的,長(zhǎng)度大小不固定,可以隨意地增加、刪減或者改變?cè)兀╩utable)。 而元組是靜態(tài)的,長(zhǎng)度大小

    2024年02月08日
    瀏覽(20)
  • Python學(xué)習(xí)—裝飾器的力量

    Python學(xué)習(xí)—裝飾器的力量

    作為許多語(yǔ)言都存在的高級(jí)語(yǔ)法之一,裝飾器是你必須掌握的知識(shí)點(diǎn)。 Python的裝飾器(Decorator)允許你擴(kuò)展和修改可調(diào)用對(duì)象(函數(shù)、方法和類(lèi))的行為,而無(wú)需永久修改可調(diào)用的對(duì)象本身。進(jìn)一步解釋就是裝飾器(Decorator):從字面上理解,就是裝飾對(duì)象的器件??梢栽诓?/p>

    2024年02月10日
    瀏覽(17)
  • 鴻蒙Harmony--狀態(tài)管理器-@Observed裝飾器和@ObjectLink裝飾器詳解

    鴻蒙Harmony--狀態(tài)管理器-@Observed裝飾器和@ObjectLink裝飾器詳解

    ?經(jīng)歷的越多,越喜歡簡(jiǎn)單的生活,干凈的東西,清楚的感覺(jué),有結(jié)果的事,和說(shuō)到做到的人。把圈子變小,把語(yǔ)放緩,把心放寬,用心做好手邊的事兒,該有的總會(huì)有的! 目錄 一,定義 二,裝飾器說(shuō)明 三,變量的傳遞/訪問(wèn)規(guī)則說(shuō)明 ?四,使用 1,簡(jiǎn)單對(duì)象的使用 2,嵌套對(duì)

    2024年02月01日
    瀏覽(26)
  • 鴻蒙Harmony--狀態(tài)管理器--@Provide裝飾器和@Consume裝飾器詳解

    鴻蒙Harmony--狀態(tài)管理器--@Provide裝飾器和@Consume裝飾器詳解

    今天是1月11日號(hào)星期四,農(nóng)歷臘月初一,辭舊的歲月里,愿你守得云開(kāi)、終見(jiàn)月明,迎新的時(shí)光中,愿你心御寒冬、順?biāo)鞜o(wú)憂(yōu),歲末冬深,希望接下來(lái)的日子里足夠幸運(yùn),攢足勇氣、信心和運(yùn)氣,去迎接新的一年,去遇見(jiàn)更好的自己! 目錄 一,定義 二,特性 三,裝飾器說(shuō)明

    2024年02月01日
    瀏覽(19)
  • HarmonyOS@Observed裝飾器和@ObjectLink裝飾器:嵌套類(lèi)對(duì)象屬性變化

    HarmonyOS@Observed裝飾器和@ObjectLink裝飾器:嵌套類(lèi)對(duì)象屬性變化

    上文所述的裝飾器僅能觀察到第一層的變化,但是在實(shí)際應(yīng)用開(kāi)發(fā)中,應(yīng)用會(huì)根據(jù)開(kāi)發(fā)需要,封裝自己的數(shù)據(jù)模型。對(duì)于多層嵌套的情況,比如二維數(shù)組,或者數(shù)組項(xiàng)class,或者class的屬性是class,他們的第二層的屬性變化是無(wú)法觀察到的。這就引出了@Observed/@ObjectLink裝飾器。

    2024年01月18日
    瀏覽(17)
  • python 元類(lèi)

    python 元類(lèi)

    我們知道在python中一切皆對(duì)象,即使是類(lèi),也是對(duì)象,那么類(lèi)這個(gè)對(duì)象是的類(lèi)是誰(shuí)呢?那就是 元類(lèi) 。 通過(guò) type() 和 obj.__class__ 可查看對(duì)象的元類(lèi): 從上面結(jié)果可以看出: 普通對(duì)象的元類(lèi)可直接查看是創(chuàng)建對(duì)象的類(lèi) 自己創(chuàng)建的一些類(lèi)的元類(lèi)是type python內(nèi)置的一些基本類(lèi)型的元

    2024年02月05日
    瀏覽(19)
  • 深入理解Python中的元類(lèi)

    所有對(duì)象都是實(shí)例化或者調(diào)用類(lèi)而得到的,Python中一切都是對(duì)象,通過(guò)class定義的類(lèi)本質(zhì)也是對(duì)象,對(duì)象又是通過(guò)調(diào)用類(lèi)得到的,因此通過(guò)class定義的類(lèi)肯定也是調(diào)用了一個(gè)類(lèi)得到的,這個(gè)類(lèi)就是元類(lèi)。type就是Python內(nèi)置的元類(lèi) 在理解元類(lèi)之前,你需要先掌握Pyt

    2024年02月08日
    瀏覽(18)
  • HarmonyOS—@Observed裝飾器和@ObjectLink嵌套類(lèi)對(duì)象屬性變化

    HarmonyOS—@Observed裝飾器和@ObjectLink嵌套類(lèi)對(duì)象屬性變化

    概述 @ObjectLink和@Observed類(lèi)裝飾器用于在涉及嵌套對(duì)象或數(shù)組的場(chǎng)景中進(jìn)行雙向數(shù)據(jù)同步: 被@Observed裝飾的類(lèi),可以被觀察到屬性的變化; 子組件中@ObjectLink裝飾器裝飾的狀態(tài)變量用于接收@Observed裝飾的類(lèi)的實(shí)例,和父組件中對(duì)應(yīng)的狀態(tài)變量建立雙向數(shù)據(jù)綁定。這個(gè)實(shí)例可以是

    2024年02月21日
    瀏覽(16)
  • 列表和元組(上)——“Python”

    列表和元組(上)——“Python”

    各位CSDN的uu們你們好呀,今天小雅蘭的內(nèi)容是Python中的列表,下面,讓我們進(jìn)入列表的世界吧 列表是什么, 元組是什么 創(chuàng)建列表 訪問(wèn)下標(biāo) 切片操作 遍歷列表元素 列表是什么, 元組是什么 編程中, 經(jīng)常需要使用變量, 來(lái) 保存/表示數(shù)據(jù) . 如果代碼中需要表示的數(shù)據(jù)個(gè)數(shù)比較少

    2023年04月18日
    瀏覽(27)
  • python通過(guò)函數(shù)和常規(guī)類(lèi)編寫(xiě)元類(lèi)

    python可以通過(guò)函數(shù)和常規(guī)類(lèi)編寫(xiě)元類(lèi)。函數(shù)和常規(guī)類(lèi)之間通過(guò)type()創(chuàng)建類(lèi)對(duì)象。 python工廠函數(shù)定義了一個(gè)外部函數(shù),它生成并返回一個(gè)嵌套函數(shù),所以調(diào)用工廠函數(shù)就可以得到嵌套函數(shù)的引用。參考《python嵌套函數(shù)作用域》 任何可調(diào)用對(duì)象都可以作為一個(gè)元類(lèi),比如函數(shù),

    2024年01月20日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包