亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

什麼是元類(lèi)

透過(guò)上面的介紹,終於模糊的帶到元類(lèi)這裡來(lái)了??墒俏覀兊浆F(xiàn)在還不知道元類(lèi)是什麼東東。

我們創(chuàng)建類(lèi)別的時(shí)候,大多數(shù)是為了創(chuàng)建類(lèi)別的實(shí)例物件。那麼元類(lèi)呢?元類(lèi)別就是用來(lái)創(chuàng)建類(lèi)別的。也可以換個(gè)理解方式就是:元類(lèi)別就是類(lèi)別的類(lèi)別。

透過(guò)上面 type() 函數(shù)的介紹,我們知道可以透過(guò) type() 函數(shù)來(lái)建立類(lèi)別:

MyClass = type('MyClass', (), {})

實(shí)際上 type() 函數(shù)是一個(gè)元類(lèi)別。 type() 是 Python 在背後用來(lái)創(chuàng)建所有類(lèi)別的元類(lèi)別。

那現(xiàn)在我們也可以猜到為什麼 type() 函數(shù)是 type 而不是 Type呢?

這可能是為了和 str 保持一致性,str 是用來(lái)建立字串物件的類(lèi),而 int 是用來(lái)建立整數(shù)物件的類(lèi)別。 type 就是建立類(lèi)別物件的類(lèi)別。你可以透過(guò)檢查 __class__ 屬性來(lái)看到這一點(diǎn)。 Python 中所有的東西,注意喔,這裡是說(shuō)所有的東西,他們都是物件。這包括整數(shù)、字串、函數(shù)以及類(lèi)別。它們?nèi)慷际菍?duì)象,而且它們都是從一個(gè)類(lèi)別創(chuàng)建而來(lái)。

# 整形
age = 23
print(age.__class__)
# 字符串
name = '兩點(diǎn)水'
print(name.__class__)
# 函數(shù)
def fu():
    pass
print(fu.__class__)
# 實(shí)例
class eat(object):
    pass
mEat = eat()
print(mEat.__class__)

輸出的結(jié)果如下:

<class 'int'>
<class 'str'>
<class 'function'>
<class '__main__.eat'>

可以看到,上面的所有東西,也就是所有物件都是透過(guò)類(lèi)別來(lái)創(chuàng)建的,那麼我們可能會(huì)好奇,__class__ 的__class__會(huì)是什麼呢?換個(gè)說(shuō)法就是,創(chuàng)建這些類(lèi)別的類(lèi)別是什麼呢?

我們可以繼續(xù)在上面的程式碼基礎(chǔ)上新增下面的程式碼:

print(age.__class__.__class__)
print(name.__class__.__class__)
print(fu.__class__.__class__)
print(mEat.__class__.__class__)

輸出的結(jié)果如下:

<class 'type'>
<class 'type'>
<class 'type'>
<class 'type'>

認(rèn)真觀(guān)察,再理清一下,上面輸出的結(jié)果是我們把整形age ,字元?jiǎng)?chuàng)name ,函數(shù)fu 和物件實(shí)例mEat 裡__class__ 的__class__ 印出來(lái)的結(jié)果。也可以說(shuō)是他們類(lèi)別的類(lèi)別列印結(jié)果。發(fā)現(xiàn)列印出來(lái)的 class 都是 type 。

一開(kāi)始也提到了,元類(lèi)別就是類(lèi)別的類(lèi)別。也就是元類(lèi)別就是負(fù)責(zé)創(chuàng)造類(lèi)別的一種東西。你也可以理解為,元類(lèi)別就是負(fù)責(zé)產(chǎn)生類(lèi)別的。而 type 就是內(nèi)建的元類(lèi)別。也就是 Python 自帶的元類(lèi)別。

繼續(xù)學(xué)習(xí)
||
提交重置程式碼