日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】对象、类、元类

發(fā)布時(shí)間:2025/3/15 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】对象、类、元类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

龜叔發(fā)明了Python,然后集成了一堆概念在這門語言里面,比如:迭代器,裝飾器,函數(shù),生成器,類,對(duì)象,協(xié)程等等。
這些概念對(duì)初學(xué)者似乎沒一個(gè)好懂的,不過還有比這更難的概念,它是Python世界中的造物主,雖然我們很少去直接使用它,但天天都在用,它就是今天的主角--元類。
要搞懂元類,我們還是先從對(duì)象說起。

對(duì)象(Object)

Python中一切皆對(duì)象,這句話你一定有聽說過(現(xiàn)在你就聽說了),一個(gè)數(shù)字是對(duì)象,一個(gè)字符串是對(duì)象,一個(gè)列表是對(duì)象,一個(gè)字典是對(duì)象,例如:

i=10 s='abc' nums=[1,2,3] dicts={"name":"zeng"}

等號(hào)右邊是對(duì)象,左邊是給這些對(duì)象取的名字,任何對(duì)象都有3個(gè)關(guān)鍵屬性:標(biāo)識(shí)、值、類型。
標(biāo)識(shí)
標(biāo)識(shí)就和人的身份證ID一樣,每個(gè)對(duì)象有唯一ID標(biāo)識(shí),在整個(gè)生命周期中都不會(huì)變,你可以認(rèn)為標(biāo)識(shí)是這個(gè)對(duì)象在計(jì)算機(jī)內(nèi)存中的地址。通過函數(shù) id()可以查看對(duì)象的ID標(biāo)識(shí)。

print("對(duì)象的唯一標(biāo)識(shí)為:"+str(id(i))) 對(duì)象的唯一標(biāo)識(shí)為:1704834400 print("對(duì)象的唯一標(biāo)識(shí)為:"+str(id(dicts))) 對(duì)象的唯一標(biāo)識(shí)為:1918903679592

對(duì)象值
對(duì)象的第二個(gè)屬性是值,值很好理解,比如 i 的值是 10,s 的值是 abc,nums 的值就是 1,2,3。
類型
對(duì)象還有一個(gè)很重要的屬性就是類型,任何對(duì)象都有屬于自己的類型,對(duì)象就是由它的類型構(gòu)造出來的。
比如上面i的類型是int類型,s的類型是字符串類型,nums的類型是列表類型,dicts的類型是字典類型,它們都是由對(duì)應(yīng)的類型構(gòu)建出來的。
通過type()可以查看對(duì)象的類型。

?

print("對(duì)象的類型為:"+str(type(i)))

?

print("對(duì)象的類型為:"+str(type(dicts))) 對(duì)象的類型為:<class 'int'> 對(duì)象的類型為:<class 'dict'>

對(duì)象的類型也和ID標(biāo)識(shí)一樣不會(huì)改變。唯一可能變的就是值。

除了系統(tǒng)已經(jīng)定義好了的整數(shù)類型,字符串類型,列表等類型之外,我們還可以創(chuàng)建自己的類型,用關(guān)鍵字class來定義。例如:

class Person(object):#__init__()有點(diǎn)像構(gòu)造函數(shù),實(shí)例化類時(shí)調(diào)用def __init__(self,name,gender):#name是實(shí)例的屬性self.name = nameself.gender = gender#live是類的屬性live = True

這里的 Person 就是自定義類,類是一個(gè)抽象的模版,既不是指張三也不是李四等具體的人,現(xiàn)在我們可以通過調(diào)用這個(gè)類來構(gòu)造(實(shí)例化)出一個(gè)具體的,實(shí)在的,有名字的對(duì)象出來,這個(gè)對(duì)象稱之為實(shí)例對(duì)象(Instance)。

類與(實(shí)例)對(duì)象

?

p1 = Person ("zhangan","男") print(p1.name) p2 = Person ("lisi","女") print(p2.name) zhangan lisi

這里的 p1、p2 就是實(shí)例化之后的(實(shí)例instance)對(duì)象,這兩個(gè)對(duì)象的類型都是 Person 類,類與(實(shí)例)對(duì)象的關(guān)系就像一個(gè)車輛模具與一輛被造出來的真實(shí)車的關(guān)系一樣。如下所示:

?

print(p1) print(id(p1)) print(type(p1)) <__main__.Person object at 0x000002031271BBE0> 2212217600992 <class '__main__.Person'>

類也是對(duì)象(又叫類對(duì)象)

剛剛我們說了一切都是對(duì)象,實(shí)例(真實(shí)的車)是對(duì)象,類(模具車)當(dāng)然也是對(duì)象,因?yàn)樗彩菍?shí)實(shí)在在存在的東西。

當(dāng) Python 解釋器執(zhí)行到關(guān)鍵字 class 這個(gè)指令的時(shí)候,在內(nèi)部就會(huì)創(chuàng)建一個(gè)名為 “Person” 的類,這個(gè)類也是個(gè)對(duì)象,我們稱之為類對(duì)象(注意區(qū)別實(shí)例對(duì)象),它一樣有ID標(biāo)識(shí)、有類型、有值。例如:

?

print(Person) print(id(Person)) print(type(Person)) <class '__main__.Person'> 2446546123192 <class 'type'>

我們注意到Person這個(gè)類對(duì)象的類型叫“type”,也就是說Person類是由type創(chuàng)建出來的,現(xiàn)在你要記住,p1,p2 是實(shí)例對(duì)象,而Person是類對(duì)象,實(shí)例對(duì)象p1的類型是類對(duì)象Person,Person的類型是type。另外,這個(gè)type是什么鬼?

我們來回顧一下:

?

i=10 print("對(duì)象的類型為:"+str(type(i))) print("對(duì)象的類型為:"+str(type(int))) 對(duì)象的類型為:<class 'int'> 對(duì)象的類型為:<class 'type'>

i的類型是int,int的類型也是type,所有類的類型都是type,也就是說所有的類都是由type創(chuàng)建的。這個(gè)type就是元類(metaclass),元類是用于創(chuàng)建類的類,道生一,一生二,三生萬物,元類就是Python中的造物主。(元類自己也是對(duì)象)

現(xiàn)在我們都知道類(對(duì)象)可以使用class關(guān)鍵字創(chuàng)建,我們還知道類(對(duì)象)的類型是type,既然知道了它的類型是type,那么肯定可以通過type(元類)來創(chuàng)建。

用元類創(chuàng)建類

前面講到過,type有一個(gè)作用是用于檢查對(duì)象的類型,其實(shí)它還有另外一個(gè)作用就是作為元類動(dòng)態(tài)地創(chuàng)建類(對(duì)象)。

?

Person1 = type("Person1", (), {"live":True}) print(Person1)

Person就是一個(gè)類,它等價(jià)于:

?

class Person1:live = True print(Person1) <class '__main__.Person1'>

用元類type創(chuàng)建類的語法是:

type(類名,父類元組(可以為空), 屬性字典)

小結(jié)
Python中一切皆為對(duì)象,類是對(duì)象,元類也是對(duì)象,元類是用于創(chuàng)建類的類。


本文章參考公眾號(hào)【python之禪】,非常感謝!
鏈接:https://mp.weixin.qq.com/s/UTFQgu4q5pHFyQZBWA9qpA

總結(jié)

以上是生活随笔為你收集整理的【Python】对象、类、元类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。