搜尋
首頁後端開發Python教學Python 元類別實例解析_python

Python 元類別實例解析_python

Apr 04, 2018 pm 04:14 PM
python實例

這篇文章主要介紹了Python 元類實例解析,此文的主要任務就是給大家徹底講明白什麼是元類,需要的朋友可以參考下

龜叔發明了Python,然後整合了一堆概念在這門語言裡面,例如:迭代器,裝飾器,函數,生成器,類,對象,協程等等。

這些概念對初學者似乎沒一個好懂的,不過還有比這更難的概念,它是Python 世界中的造物主,雖然我們很少去直接使用它,但天天都在用,它就是今天的主角------元類。

今天我的任務就是徹底明白什麼是元類,一起看看。

要搞懂元類,我們還是先從物件說起。

物件(Object)

Python 一切皆對象,這句話你一定聽過(現在你就聽說了) ,一個數字是對象,一個字串是對象,一個列表是對象,一個字典是對象,例如:


#
>>> i = 10
>>> s = "abc"
>>> nums = [1,2,3]
>>> dicts = {"name":"zhang"}


##等號右邊是對象,左邊是給這些對象取的名字,任何對像都有3個關鍵屬性:標識、值、類型。

標識

標識就和人的身分證ID一樣,每個物件都有唯一ID標識,在整個生命週期中都不會變,你可以認為標識是這個物件在電腦記憶體中的位址。透過函數 id() 可以查看物件的ID識別。


>>> id(i)
40592592
>>> id(s)
44980584


#物件值

物件的第二個屬性是值,值很好理解,例如i 的值是10,s 的值是abc,nums 的值就是1,2,3。

類型

物件還有一個很重要的屬性就是類型,任何物件都有屬於自己的類型,物件就是由它的類型建構出來的,例如上面的i 的類型是int 類型,這個物件就是由int 建構出來的。 s 類型是字串類型,nums 的類型是列表類型,dicts 的類型是字典類型,它們都是由對應的類型建構出來的。

透過 type() 可以查看物件的型別。


>>> type(i)
<class &#39;int&#39;>
>>> type(s)
<class &#39;str&#39;>
>>> type(nums)
<class &#39;list&#39;>
>>> type(dicts)
<class &#39;dict&#39;>


物件的型別也和ID標識一樣,確定好之後就不會再改變了。

類別與(實例)物件

除了系統已經定義好了的整數類型,字串類型,清單等類型之外,我們也可以建立自己的類型,用關鍵字class 來定義。例如:


>>> class Person:
  # 这里的 self 指某个实例对象自己
...  def __init__(self, name):
   # name 是实例的属性
...   self.name = name
  # live 是类的属性
  live = True


這裡的Person 是自訂類,類別是抽象的模版,既不指張三也不是李四,現在我們可以透過呼叫這個類別來建構(實例化)出一個具體的,實在的,有名字的物件出來,這個物件稱之為實例物件。


>>> p1 = Person("zhangsan")
>>> p1.name
&#39;zhangsan&#39;
>>>
>>> p2 = Person("lisi")
>>> p2.name
&#39;lisi&#39;


這裡的p1、p2 就是實例化之後的(實例)對象,這兩個物件的類型都是Person 類,類別與(實例)物件的關係就像一個車輛模具與一輛被造出來的真實車的關係一樣。


>>> p1
<__main__.Person object at 0x0195AA30>
>>> type(p1)
<class &#39;__main__.Person&#39;> # 这里的__main__是模块名称


#類別也是物件(又叫類別物件)

剛剛我們說了一切都是對象,實例(真實車)是對象,類別(模具)當然也是對象,因為它也是個實實在存在的東西,

當Python 解釋器執行到關鍵字class 這個指令的時候,在內部就會創建一個名為"Person" 的類,這個類也是個對象,我們稱為類對象(注意區別實例對象),它一樣有ID標識、有型別、有值。例如:


>>> id(Person)
26564024
>>> type(Person)
<class &#39;type&#39;>
>>> Person
<class &#39;__main__.Person&#39;>


我們注意到這個Person 這個類別物件的型別叫“type”,也就是說Person 類別是由type創建出來的,現在你要記住,p1,p2 是實例對象,而Person 是類別對象。另外,這個 type 是什麼鬼?

我們來回顧一下,實例物件p1 的型別是類別物件Person,Person 的型別type


>>> nums = [1,2,3]
>>> type(nums)
<class &#39;list&#39;>
>>> type(list)
<class &#39;type&#39;>


nums 的型別是list,list 的型別也是type,字典類別(dict)的型別也是type,所有類別的型別都是type,也就是說所有的類別都是由type 建立的。這個 type 就是元類,道生一,一生二,三生萬物,元類就是 Python 中的創造者。 (元類別自己也是物件)

現在我們都知道類別(物件)可以使用class 關鍵字創建,我們也知道類別(物件)的類型是type,既然知道了它的類型是type,那麼肯定可以透過type(元類別)來創建。

用元類別建立類別#

前面讲到过,type 有一个作用是用于检查对象的类型,其实它还有另外一个作用就是作为元类动态地创建类(对象)。


>>> Person = type("Person", (), {"live":True})
>>> Person
<class &#39;__main__.Person&#39;>


Person 就是一个类,它等价于:


>>> class Person:
...  live = True
...
>>> Person
<class &#39;__main__.Person&#39;>


用元类 type 创建类的语法是:

type(类名,基类元组(可以为空), 属性字典)

总结

以上所述是小编给大家介绍的 Python 元类实例解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


相关推荐:

Python解析JSON的实例分享

分析Python解析XML的几种方式


以上是Python 元類別實例解析_python的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python和時間:充分利用您的學習時間Python和時間:充分利用您的學習時間Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python:遊戲,Guis等Python:遊戲,Guis等Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python vs.C:申請和用例Python vs.C:申請和用例Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時的Python計劃:一種現實的方法2小時的Python計劃:一種現實的方法Apr 11, 2025 am 12:04 AM

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python:探索其主要應用程序Python:探索其主要應用程序Apr 10, 2025 am 09:41 AM

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

您可以在2小時內學到多少python?您可以在2小時內學到多少python?Apr 09, 2025 pm 04:33 PM

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?如何在10小時內通過項目和問題驅動的方式教計算機小白編程基礎?Apr 02, 2025 am 07:18 AM

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?如何在使用 Fiddler Everywhere 進行中間人讀取時避免被瀏覽器檢測到?Apr 02, 2025 am 07:15 AM

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。