元類

在大多數(shù)編程語(yǔ)言中,類就是一組用來(lái)描述如何生成一個(gè)對(duì)象的代碼段。在Python中這一點(diǎn)仍然成立:在Python的世界里,一切皆為對(duì)象:數(shù)值、序列、字典、函數(shù)、模塊、、、等等,無(wú)一例外。其中,“類也是對(duì)象” 的概念最讓人匪夷所思,這完全超越了傳統(tǒng)的OO(object oriented)思想。

但是,Python中的類還遠(yuǎn)不止如此。類同樣也是一種對(duì)象。是的,沒(méi)錯(cuò),就是對(duì)象。只要你使用關(guān)鍵字class,Python解釋器在執(zhí)行的時(shí)候就會(huì)創(chuàng)建一個(gè)對(duì)象。

class User(object):

pass

user = User()

print(user)

將在內(nèi)存中創(chuàng)建一個(gè)對(duì)象,名字就是 User。這個(gè)對(duì)象(類對(duì)象User)擁有創(chuàng)建對(duì)象(實(shí)例對(duì)象)的能力。但是,它的本質(zhì)仍然是一個(gè)對(duì)象,于是乎你可以對(duì)它做如下的操作:

1.你可以將它賦值給一個(gè)變量

2.你可以拷貝它

3.你可以為它增加屬性

4.你可以將它作為函數(shù)參數(shù)進(jìn)行傳遞

class User(object):

def say(self):

print("hello word")

Python解釋器執(zhí)行class語(yǔ)句時(shí):

確定元類mcls。元類的查找優(yōu)先級(jí)為:

首先查找類User是否擁有屬性__metaclass__

否則查找類User的父類是否具有屬性__metaclass__

否則查找類User所在模塊是否具有全局變量__metaclass__

否則使用默認(rèn)元類(經(jīng)典類:types.ClassType;新式類:type)


python中新式類與舊式類的區(qū)別:

新式類和經(jīng)典類的最大不同之處在于,所有的新式類必須至少一個(gè)父類,參數(shù)bases可以是一個(gè)或者多個(gè)用于繼承的父類。

新式類都從object繼承,經(jīng)典類不需要。

新式類的MRO(method resolution order基類搜索順序)算法采用C3算法廣度優(yōu)先搜索,而舊式類的MRO算法是采用深度優(yōu)先搜索

新式類相同父類只執(zhí)行一次構(gòu)造函數(shù),經(jīng)典類重復(fù)執(zhí)行多次。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在大多數(shù)編程語(yǔ)言中,類就是一組用來(lái)描述如何生成一個(gè)對(duì)象的代碼段。在Python中這一點(diǎn)仍然成立:在Python的...
    哈嘍小生閱讀 297評(píng)論 0 0
  • 一元類 1類也是對(duì)象 在大多數(shù)編程語(yǔ)言中,類就是一組用來(lái)描述如何生成一個(gè)對(duì)象的代碼段。在Python中這一點(diǎn)仍然成...
    五行缺覺(jué)閱讀 1,162評(píng)論 0 1
  • 什么是元類? 理解元類(metaclass)之前,我們先了解下Python中的OOP和類(Class) 面向?qū)ο笕?..
    時(shí)間之友閱讀 402評(píng)論 0 0
  • 前言 第十二篇了,擼起袖子,就是干。 目錄 一、Python 中類也是對(duì)象 在了解元類之前,我們先進(jìn)一步理解 Py...
    GitHubClub閱讀 850評(píng)論 0 7
  • 今天停水,沒(méi)法子做飯,口福到了,我們出去吃。嘢
    浩浩書(shū)屋閱讀 136評(píng)論 0 0

友情鏈接更多精彩內(nèi)容