如何創建您的第一個Python元類?

      網友投稿 933 2025-04-02

      Python元類設置類的行為和規則。元類有助于修改類的實例,并且相當復雜,是Python編程的高級功能之一。通過本文,我將深入討論Python元類,其屬性,如何以及何時在Python中使用元類。本文介紹以下概念:


      什么是Python元類?

      Python中的類和對象

      Python中的動態類

      Python元類如何工作?

      類型類

      Python中的自定義元類

      裝飾器vs元類

      什么是Python元類?

      Python元類是與Python的面向對象編程概念相關的高級功能之一。它確定類的行為,并進一步幫助其修改。

      用Python創建的每個類都有一個基礎的Metaclass。因此,在創建類時,您將間接使用元類。它隱式發生,您無需指定任何內容。

      與元編程相關聯的元類決定了程序對其自身進行操作的能力。?學習元類可能看起來很復雜,但是讓我們先從一些類和對象的概念入手,以便于理解。

      Python中的類和對象

      類是一個藍圖,是具有對象的邏輯實體。?一個簡單的類在聲明時沒有分配任何內存,它是在創建一個類的實例時發生的。

      通過創建的對象,可以訪問該類。該類僅用作模板。對象的屬性本質上意味著我們可以在運行時與它進行交互,傳遞諸如變量之類的參數,進行存儲,修改,也可以與它進行交互。

      可以使用__class__屬性檢查對象的類。讓我們看一個簡單的例子:

      class Demo: pass #This is a class named demo test=Demo() print(test.__class__) #shows class of obj print(type(test)) #alternate method

      Output:

      Python大量處理類和對象的概念,并允許輕松,順利地進行應用程序開發。但是,什么使Python與Java和C這樣的語言不同呢?Python中的所有內容都可以定義為具有屬性和方法的對象。?主題演講是Python中的類不過是更大類的另一個對象。

      類為對象定義規則。同樣,元類負責為類分配行為。我們已經知道,類是對象,就像每個對象都有一個實例一樣,類是元類的實例。

      但是也有像Ruby和Objective-C這樣的語言也支持元類。那么,是什么使Python Metaclass更好,為什么還要學習它呢?答案是Python中的動態類。讓我們仔細看看。

      Python中的動態類

      Python是一種動態編程語言,并允許在運行時創建類。與C ++等其他語言不同,后者僅允許在編譯時創建類。在靈活性方面,Python優于其他靜態類型的語言。

      動態和靜態類型語言之間的差異并不大,?但是在Python中,它由于提供元編程而變得更加有用。

      但是,如果我告訴您還有另一個關鍵功能將Python與其他編程語言區分開呢?

      諸如Java或C ++之類的語言具有float,char,int等數據類型,而Python將每個變量視為對象。每個對象都屬于一個類,例如int類或str類。您可以使用稱為type()的內置函數來簡單地檢查任何變量的類。

      number = 10993 print("Type associated is:", type(number)) name = "Aishwarya" print("Type associated is:", type(name))

      Output:

      Type associated is:?

      Type associated is:

      現在,您了解了Python中的所有內容都有與之關聯的類型。在下一個主題中,我們將嘗試了解元類實際上是如何工作的。

      Python元類如何工作?

      每當創建一個類時,都會調用默認的Metaclass類型。??元類包含名稱,基類集以及與該類關聯的屬性等信息。因此,在實例化一個類時,將調用帶有這些參數的類。可以通過兩種方法創建元類:

      類型類

      自定義元類

      讓我們繼續輸入class以及如何創建class。

      類型類

      Python有一個稱為type的內置元類。與Java或C不同,那里有主要的數據類型。Python中的每個變量或對象都有一個與之關聯的類。Python使用幕后的Type類創建所有類。在上一個主題中,我們看到了如何使用type()檢查對象的類。讓我們舉一個例子,說明如何通過創建一個簡單的類來定義新類型。

      class Edureka(): obj = Edureka() print(type(obj))

      Output:

      print(type(Edureka))

      Output:

      在上面的代碼中,我們有一個名為Edureka的類,以及一個關聯的對象。我們通過簡單地在該類型之后創建一個名為自身的類,創建了一個名為Edureka的新類型。在第二個代碼中,當我們檢查Edureka類的類型時,其結果為“類型”。

      因此,除非另有定義,否則元類使用類型類來創建所有其他類。我們可以通過兩種方法訪問Type類:

      當我們通過類型類傳遞參數時,它使用以下語法。

      type(__name__, __base__, attributes)

      如何創建您的第一個Python元類?

      哪里,

      名稱是一個字符串,并帶有類名

      該基礎是一個元組,可幫助創建子類

      屬性是字典,并分配鍵值對

      由于Python中的類的行為與對象相似,因此可以用相同的方式更改其行為。我們可以在類內添加或刪除方法,類似于對對象的處理方式。

      現在您已經知道Metaclass在Python中創建了所有其他類,并使用類型class定義了它們的行為。但是,您一定想知道,我們還有其他方法可以創建元類嗎?因此,讓我們看看如何創建一個自定義的元類。

      Python中的自定義元類

      現在我們知道并理解類型類如何工作。現在該學習如何創建自定義元類了。我們可以通過執行動作或代碼注入來修改類的工作。為此,我們可以在創建類定義時將Metaclass作為關鍵字傳遞。另外,我們可以通過簡單地繼承通過此Metaclass關鍵字實例化的類來實現此目的。

      在創建新類時,Python查找__metaclass__??關鍵字。以防萬一,如果不存在。它遵循類型類層次結構。

      Python在命名空間中執行所有字典后,將調用類型對象,后者創建類的對象。我們可以使用兩種方法來創建自定義元類。

      class EduFirst(type): def __new__(cls, name, base_cls, dict): pass class EduSecond(type): def __init__(self, name, base_cls, dict): pass

      讓我詳細解釋這兩種方法:

      __new __():? 當用戶要在類創建之前定義元組字典時使用。它返回一個類的實例,并且很容易覆蓋/管理對象流。

      __init __():在創建對象并對其進行初始化之后調用它。

      Python中的__call__是什么?

      在正式的Python文檔中,__call__方法可用于定義自定義元類。同樣,當調用類定義自定義行為時,我們可以覆蓋__prepare__之類的其他方法。

      就像類如何像創建對象的模板一樣,元類也像類創建模板一樣。因此,元類也稱為類工廠。

      請參見下一個示例:

      class Meta(type): def __init__(cls, name, base, dct): cls.attribute = 200 class Test(metaclass = Meta): pass Test.attribute

      Output: 200

      元類允許自定義類。還有多種其他有效且簡單得多的方法可以通過這些方法實現相同的輸出。這樣的例子之一就是使用裝飾器。

      裝飾器vs元類

      Decorator是Python的一項流行功能,它允許您向代碼中添加更多功能。裝飾器是可調用的對象,可幫助修改現有的類甚至函數。在編譯期間,部分代碼將調用并修改另一部分。此過程也稱為元編程。

      def decorator(cls): class NewClass(cls): attribute = 200 return NewClass @decorator Class Test1: pass @decorator Class Test2: pass Test1.attribute Test2.attribute

      Output: 200

      Python中的Decorator是一個非常有用且功能強大的工具,可幫助您更改函數的行為,而無需實際更改任何代碼。?當您要在調試時修改程序的一部分而不是重寫函數或更改整個程序時,這非常方便。取而代之的是,您只需編寫一個單行裝飾器,其余的就由它來處理。

      這使我們到會議結束。希望本文能幫助您了解什么是元類以及如何以及何時使用它。

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何修改批注底紋顏色(批注文字顏色怎么改)
      下一篇:Excel表格之基數詞轉換成序數詞
      相關文章
      精品国产_亚洲人成在线| 亚洲乱码一二三四区乱码| 亚洲色偷精品一区二区三区| 亚洲熟妇无码久久精品| 亚洲毛片免费观看| 亚洲欧洲精品在线| 亚洲一级毛片免观看| 亚洲天堂福利视频| 亚洲一级毛片免费在线观看| 精品亚洲成A人无码成A在线观看| 亚洲午夜精品一区二区公牛电影院| 亚洲美女自拍视频| 亚洲国产成人无码av在线播放| 西西人体44rt高清亚洲| 亚洲视屏在线观看| 亚洲午夜电影在线观看| 2019亚洲午夜无码天堂| 亚洲欧美日韩中文高清www777| 亚洲AV无码一区二区三区电影 | 777亚洲精品乱码久久久久久| 亚洲av日韩av天堂影片精品| 色播亚洲视频在线观看| 亚洲男女性高爱潮网站| 亚洲一区二区三区深夜天堂| 亚洲熟女综合一区二区三区| 亚洲AV成人无码久久WWW| 亚洲国产成人精品女人久久久 | 亚洲人成电影院在线观看| 亚洲成a人片在线观| 亚洲人成77777在线观看网| 亚洲国产无线乱码在线观看| 国产一区二区三区亚洲综合| 亚洲中文字幕成人在线| 亚洲国产精华液网站w| 亚洲永久中文字幕在线| 亚洲午夜福利在线视频| 亚洲午夜无码久久| 亚洲国产精品人人做人人爱| 国产亚洲精品岁国产微拍精品| 久久精品国产亚洲AV大全| 亚洲va久久久久|