Python的協(xié)議方法在大多數(shù)情況下被稱為魔法方法节吮,當(dāng)用戶重載此類方法的時(shí)候,那么被重載的方法將在對(duì)應(yīng)的情況下被調(diào)用瘪匿。我們可以把協(xié)議方法理解成開發(fā)者和Python語法之間的接口跛梗,通過修改接口協(xié)議我們能夠更深入地掌控代碼的運(yùn)行。
這里有個(gè)好玩的協(xié)議方法棋弥,__all__核偿,它可以控制 from xxx import * 的操作。
JavaScript代理對(duì)象Proxy用于修改某些操作的默認(rèn)行為顽染,Proxy對(duì)象可以攔截用戶對(duì)目標(biāo)對(duì)象的訪問漾岳。
由此可見,協(xié)議方法與Proxy都能夠攔截用戶對(duì)目標(biāo)的操作粉寞。
利用這種特性尼荆,當(dāng)我們?cè)诙x一個(gè)底層對(duì)象的時(shí)候,我們可以攔截對(duì)屬性的操作唧垦,然后編寫我們希望的操作代碼捅儒。這樣實(shí)現(xiàn)了封裝的目的,簡化了高層的代碼結(jié)構(gòu)振亮,同時(shí)達(dá)到了面向切面的效果巧还。
吐槽一下,在很長的一段時(shí)間里坊秸,我覺得Python的協(xié)議方法不是一個(gè)很好理解的概念麸祷,而且看的文章大多都是在堆某個(gè)協(xié)議方法的執(zhí)行時(shí)機(jī)。但是在學(xué)習(xí)JavaScript的Proxy時(shí)褒搔,稍微花點(diǎn)時(shí)間就明白了阶牍,然后就遷移理解了Python協(xié)議方法喷面,很微妙。