python元類的使用 Python的元類如何使用

2021-10-11 12:51:35 字數 2417 閱讀 6041

這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。

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

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

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使用元類

原文 type 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。比方說我們要定義乙個hello的class,就寫乙個hello.py模組 當python直譯器載入hello模組時,就會依次執行該模組的所有語句,執行結果就是動態建立出乙個hello的class...

python元類的使用 Python 元類使用講解

我要一大群的類都具有一種特點,我怎麼給他們加上呢?模板嘛,我從這個模板建立一群類不就ok了?那就需要元類了。定義乙個元類 就是乙個類的模板!莫多想,還要記住這是類級別的,不是物件級別的!如下 class mymeta type def init cls,name,bases,dic print cl...

python如何使用元 Python的元類如何使用

這次給大家帶來python的元類如何使用,使用python元類的注意事項有哪些,下面就是實戰案例,一起來看一下。今天我的任務就是徹底明白什麼是元類,一起看看。要搞懂元類,我們還是先從物件說起。物件 object python 一切皆物件,這句話你一定有聽說過 現在你就聽說了 乙個數字是物件,乙個字串...