溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

換個角度理解python元編程

發(fā)布時間:2020-09-22 05:51:51 來源:網(wǎng)絡(luò) 閱讀:543 作者:bluehook 欄目:編程語言

元編程這個概念本身不新,只是沒有發(fā)現(xiàn)原來很早就在用這個東西,所以python等下再聊,先理一理怎么理解編程這個事情。
我仔細(xì)思考,其實(shí)是在做一件設(shè)計(jì)想法,紀(jì)錄想法,實(shí)現(xiàn)想法的過程。
怎么樣設(shè)計(jì)想法?應(yīng)該需要一些圖形,文字通過一定格式紀(jì)錄下來,反復(fù)修改,最好是有一個規(guī)范或者工具讓其他人也能明白和理解,方便交流。這個問題在編程這里也就是進(jìn)入到編程語言的選擇上面來,也可以自己制定一個規(guī)范,不管你用lex+yacc語法制導(dǎo)還是設(shè)計(jì)LLVM的AST,反正結(jié)果是要一種編程語言來設(shè)計(jì)你的想法。
選定了設(shè)計(jì)想法的規(guī)范也就是編程語言,現(xiàn)在就是怎么樣來紀(jì)錄想法,顯而易見不可能是流水賬式的紀(jì)錄,你得把想法重點(diǎn)理清楚,想法的關(guān)鍵字是什么,有些什么用途,有沒有關(guān)聯(lián)的事務(wù),這里就是紀(jì)錄想法的格式,對應(yīng)到編程就是你用什么設(shè)計(jì)模式,你是用傳統(tǒng)的類繼承,還是鴨子類型的接口或者猴子補(bǔ)丁的方式來紀(jì)錄想法。
有了紀(jì)錄的想法圖紙,對應(yīng)到編程就是靜態(tài)的代碼字面量,就能真正的實(shí)現(xiàn)想法,根據(jù)想法圖紙生成真實(shí)的對象。
這個過程和元編程有什么關(guān)系?如果你明白上面的過程,我就可以這樣描述:lex+yacc可以創(chuàng)建編程語言,編程語言可以創(chuàng)建元編程,元編程可以創(chuàng)建類,類可以創(chuàng)建對象實(shí)例。
那到底什么是元編程呢,C++里面他的實(shí)現(xiàn)叫做模板和宏,python里面他可以用裝飾器實(shí)現(xiàn),也可以用type元類型實(shí)現(xiàn),他是在編程語言和類之間的一層設(shè)計(jì)技術(shù),yacc生成的對象是編程語言,編程語言生成的對象是元編程對象,元編程對象生成的對象是類,類生成的對象是實(shí)例。
C的宏和模板出現(xiàn)得很早很早,本質(zhì)也很簡單,就像是一份留白的合同,你填上名字就能用。
python對象有2個重要的容器,一個是繼承元組,一個是屬性字典,所有的屬性包括方法都是放在屬性字典里面,這個2個容器在init之前就已經(jīng)生成好,如果你要在init之前做一些處理,比如捕獲子類的屬性名把字符串類型的屬性名前面都加上str,把方法名首字符都大寫,強(qiáng)制子類使用一些編程規(guī)約,還或者加載一些緩存的數(shù)據(jù),實(shí)現(xiàn)方法重載等等。當(dāng)然子類可以在init做自己的處理,如果你是一個框架的設(shè)計(jì)者,自動化一些背后的處理確實(shí)看起來很高級。所以元編程的本質(zhì)就是一種增加樂趣的玩具,應(yīng)為編碼很枯燥的。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI