關(guān)于元類的部分應(yīng)用
????這樣可以控制A這個(gè)類的atrribute,從而控制其實(shí)例化時(shí)的object可以調(diào)用的方法。不過這個(gè)方式在IDE中還是會(huì)顯式提示可以調(diào)用func3,實(shí)際執(zhí)行時(shí)會(huì)報(bào)錯(cuò)has no attribute。
????實(shí)際上定義class A時(shí)先執(zhí)行的是new方法,所以如果希望定義時(shí)傳參,要先在new里面寫對(duì)應(yīng)的參數(shù),然后還必須在init里面也寫上(因?yàn)樗坪踉谡{(diào)用new的過程中,緊接著就會(huì)將參數(shù)原封不動(dòng)傳遞給元類的init)。
????在寫元類init時(shí)可以不用return,用了反而會(huì)說init cannot return。
????在繼承時(shí)可以采用type也可以用super,但是最核心的是,不同的方法有時(shí)候需要傳參self和cls,具體區(qū)別參考高天的視頻。
????init和new的區(qū)別僅僅在于是在創(chuàng)建class A這個(gè)對(duì)象前還是后對(duì)其屬性進(jìn)行增添還是修改(區(qū)別很模糊,最好寫在new里,因?yàn)槲覈L試寫在init里提示我__init_subclass不接受kwargs,所以感覺還要重寫__init_subclass__而不是__init__)。
標(biāo)簽: