這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。
今天我的任務就是徹底明白什麼是元類,一起看看。
要搞懂元類,我們還是先從物件說起。
物件(object)
python 一切皆物件,這句話你一定有聽說過(現在你就聽說了),乙個數字是物件,乙個字串是物件,乙個列表是物件,乙個字典是物件,例如:>>> i = 10
>>> s = "abc"
>>> nums = [1,2,3]
>>> dicts =
等號右邊是物件,左邊是給這些物件取的名字,任何物件都有3個關鍵屬性:標識、值、型別。
標識標識就和人的身份證id一樣,每個物件有唯一id標識,在整個生命週期中都不會變,你可以認為標識是這個物件在計算機記憶體中的位址。通過函式 id() 可以檢視物件的id標識。>>> id(i)
>>> id(s)
物件值物件的第二個屬性是值,值很好理解,比如 i 的值是 10,s 的值是 abc,nums 的值就是 1,2,3。
型別物件還有乙個很重要的屬性就是型別,任何物件都有屬於自己的型別,物件就是由它的型別構造出來的,比如上面的 i 的型別是 int 型別,這個物件就是由 int 構造出來的。s 型別是字串型別,nums 的型別是列表型別,dicts 的型別是字典型別,它們都是由對應的型別構建出來的。
通過 type() 可以檢視物件的型別。>>> type(i)
>>> type(s)
>>> type(nums)
>>> type(dicts)
物件的型別也和id標識一樣,確定好之後就不會再變化了。
類與(例項)物件
除了系統已經定義好了的整數型別,字串型別,列表等型別之外,我們還可以建立自己的型別,用關鍵字 class 來定義。例如:>>> class person:
# 這裡的 self 指某個例項物件自己
... def init(self, name):
# name 是例項的屬性
... self.name = name
# live 是類的屬性
live = true
這裡的 person 就是自定義類,類是乙個抽象的模版,既不指張三也不是李四,現在我們可以通過呼叫這個類來構造(例項化)出乙個具體的,實在的,有名字的物件出來,這個物件稱之為例項物件。>>> p1 = person("zhangsan")
>>> p1.name
'zhangsan'
>>> p2 = person("lisi")
>>> p2.name
'lisi'
這裡的 p1、p2 就是例項化之後的(例項)物件,這兩個物件的型別都是 person 類,類與(例項)物件的關係就像乙個車輛模具與一輛被造出來的真實車的關係一樣。>>> p1
>>> type(p1)
# 這裡的main是模組名稱
類也是物件(又叫類物件)
剛剛我們說了一切都是物件,例項(真實車)是物件,類(模具)當然也是物件,因為它也是個實實在在存在的東西,
當 python 直譯器執行到關鍵字 class 這個指令的時候,在內部就會建立乙個名為 "person" 的類,這個類也是個物件,我們稱之為類物件(注意區別例項物件),它一樣有id標識、有型別、有值。例如:>>> id(person)
>>> type(person)
>>> person
我們注意到這個 person 這個類物件的型別叫 「type」,也就是說 person 類是由 type 建立出來的,現在你要記住,p1,p2 是例項物件,而 person 是類物件。另外,這個 type 是什麼鬼?
我們來回顧一下,例項物件 p1 的型別是類物件 person,person 的型別 type>>> nums = [1,2,3]
>>> type(nums)
>>> type(list)
nums 的型別是 list,list 的型別也是 type,字典類(dict)的型別也是 type,所有類的型別都是 type,也就是說所有的類都是由type 建立的。這個 type 就是元類,道生一,一生二,三生萬物,元類就是 python 中的造物主。(元類自己也是物件)
現在我們都知道類(物件)可以使用 class 關鍵字建立,我們還知道類(物件)的型別是 type,既然知道了它的型別是 type,那麼肯定可以通過 type(元類)來建立。
用元類建立類
前面講到過,type 有乙個作用是用於檢查物件的型別,其實它還有另外乙個作用就是作為元類動態地建立類(物件)。>>> person = type("person", (), )
>>> person
person 就是乙個類,它等價於:>>> class person:
... live = true
>>> person
用元類 type 建立類的語法是:
type(類名,基類元組(可以為空), 屬性字典)
推薦閱讀:
python實現求解最大公約數的方法
在python中numpy與array應該怎樣轉換
python使用 如何呼叫另外乙個python檔案
注 好記性不如爛筆頭,多記重複練習。首先匯入我們需要呼叫的檔案 from 檔名 import 類函式 from 檔名 import 在呼叫檔案的使用時需要把呼叫檔案以及現在使用的檔案同時放在同乙個目錄檔案下使用 呼叫分為三種 一種是呼叫某個函式,一種是呼叫整個檔案的,還有一種是在同乙個檔案中呼叫其他...
python中如何建立包 如何建立python的包
包是模組的集合,更適合乙個專案。像很多的第三方知名的模組都是以包的形式存 簡單的包實現 自己做乙個ammd包,功能簡單的只有加減乘除等功能,加減在乙個模組matham裡,乘除位於另乙個模組裡mathmd。下面是matham模組的 def add x,y return x ydef minus x,y...
python怎麼成為高手 如何成為Python高手
這篇文章主要是對我收集的一些文章的摘要。因為已經有很多比我有才華的人寫出了大量關於如何成為優秀python程式設計師的好文章。我的總結主要集中在四個基本題目上 函式式程式設計,效能,測試,編碼規範。如果乙個程式設計師能將這四個方面的內容知識都吸收消化,那他 她不管怎樣都會有巨大的收穫。函式式程式設計...