以下內容很多培訓一般都不會涉及,因為面向物件物件程式設計的思想是:你只需要使用工具即可,不需要了解這些工具怎麼來的,它的原理又是什麼;
所以,以下內容僅作為了解性知識點。
為什麼我們使用class關鍵字定義類的時候,只需要類名+括號()就可以呼叫類產生物件?
主要是因為type中定義了相應的方法,我們定義一個類的時候,執行的的步驟如下:
1、先創造一個空物件,比如物件名是ppp;
2、呼叫元類內部的__init__方法,完成物件的初始化操作;
3、返回初始化好的物件;
但是要完成以上3步的操作,需要呼叫元類中的__call__方法和__new__方法。
在__init__初始化之前,會先使用__new__方法先創造一個空物件;然後才是呼叫類的__init__方法進行物件的初始化操作;
如果想讓一個物件可以加括號()呼叫,需要在該物件的類中新增一個___call__方法;
1、元類的.__call__函式會先呼叫type內的__new__方法創造一個空物件;
2、元類的__call__函式會先呼叫type內的__init__方法初始化;
3、元類的__call__函式會返回一個初始化好的物件。
最新評論