元類

元類 python

若是一切皆對象,而調用一個類,會實例化出一個對象,那把類看作一個對象,這個類A也就是調用了一個另外一個類B而生成的對象,另外一個類B就叫作元類。類A=B(....)spa

  1. Type(默認爲全部類的元類)

在以前,咱們能夠經過type來肯定一個對象的所屬類型(即這個對象所屬類):對象

print(type(1))>>>>>>>>>   <class  int>  ———  1 是屬於int這個類的。繼承

實際相對於調用type元類傳入參數1,生成一個int字符串

 

那麼類A是屬於哪一個類呢:printtype(A)>>>>>>   <class  type>it

說明類A這個對象是屬於type這個類的。默認元類爲type(內置的元類)。元類能夠簡稱爲類所屬的類,即類的類。模板

 

 

  1. class關鍵字建立類的流程分析:

class關鍵字定義的類自己也是一個對象。負責產生該對象的類稱爲元類。class

Class關鍵字在建立類的時候,必然調用了內置元類type。即type(  )方法

傳入的參數又是什麼呢?必然是:call

  1. 類名2.基類們 (元組)

3.類的名稱空間(字典):類的名稱在執行類體代碼而獲得,調用type時會依次傳入以上三個參數。

綜上所述:class建立類的流程爲:

1.拿到類名>>2.拿到類的基類們(元組)>>3.執行類體代碼體,拿到類的名稱空間(字典)>>4.調用元類獲得類。

3.exec(python代碼,全局,局部)

第一個參數是包含python代碼的字符串,該內置方法會自動執行字符串中的代碼,且將產生的名字放到對應的名稱空間。若是字符串中沒有聲明是全局,會默認放到局部空間。

參數二是用來接受全局的名稱空間。

參數三是局部名稱空間。

必須包含三個參數,不然報錯。且參數二參數三是字典類型。

 

4.重點:

類的產生過程就是調用元類的過程:

=元類(類名,(基類們,),{名稱空間}

 

自定義一個元類的方式:繼承元類type

能夠利用自定義元類(做用):

  1. 控制類的建立過程。(元類中__init__)

自定義元類中的__init__須要的參數就是類名、基類(元組)、名稱空間(字典)是給重用繼承type__init__用的,而後在下面再跟上一些邏輯做爲控制(限制、規範)產生的類

  1. 控制生成類的調用。(元類中__call__

 

那麼調用類其實是調用元類中的__call__

 

 

以上是__call__的模板(可添加其餘限制。)

相關文章
相關標籤/搜索