淺析Python裝飾器以及裝飾器模式
漫談
如果作為一個(gè)Python入門,不了解Python裝飾器也沒什么,但是如果作為一個(gè)中級(jí)Python開發(fā)人員,如果再不對(duì)python裝飾器熟稔于心的話,那么可能并沒有量變積累到質(zhì)變。
我以前也看過很多講python 裝飾器的文章,但是都是看了就忘。一方面是沒有做太多的練習(xí),二是對(duì)它的領(lǐng)會(huì)不是很深。
希望引以為戒?。?!
鄭傳
裝飾模式
如果你了解Java,你肯定聽過 裝飾器模式。在面向?qū)ο笾?,裝飾模式指:動(dòng)態(tài)地給一個(gè)對(duì)象添加一些額外的職責(zé)。就增加一些功能來說,裝飾模式比生成子類更為靈活。
在設(shè)計(jì)模式學(xué)習(xí)----裝飾器模式,我摘取了下面一段使用裝飾器模式的代碼
public class DecoratorPattern {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Basket basket = new Original();
//一個(gè)裝飾的過程
Basket myBasket =new AppleDecorator(new BananaDecorator(new OrangeDecorator(basket)));
myBasket.show();
}
}
等會(huì)注意下 Basket myBasket =new AppleDecorator(new BananaDecorator(new OrangeDecorator(basket))) 這段的寫法
在Python官方文檔PythonDecorators 是這么介紹裝飾器的
What is a Decorator
A decorator is the name used for a software design pattern. Decorators dynamically alter the functionality of a function, method, or class without having to directly use subclasses or change the source code of the function being decorated.
翻一下: 就是裝飾器是一種軟件設(shè)計(jì)模式,被用來動(dòng)態(tài)修改函數(shù)、方法,或者類功能卻不是通過子類,或者修改原代碼實(shí)現(xiàn)。
跟之前是一個(gè)意思?。?!
Python Decorator
而Python的裝飾器與之不同,官方這么說:
The "decorators" we talk about with concern to Python are not exactly the same thing as the DecoratorPattern described above. A Python decorator is a specific change to the Python syntax that allows us to more conveniently alter functions and methods (and possibly classes in a future version). This supports more readable applications of the DecoratorPattern but also other uses as well.
Support for the decorator syntax was proposed for Python in PEP 318, and will be implemented in Python 2.4.
翻譯下:Python的 decorators 與 DecoratorPattern并不完全相同。 Python的decorator是一種特殊:在語(yǔ)法上實(shí)現(xiàn)允許我們更靈活地更改方法,或者函數(shù)。
例子:
@classmethod def foo (arg1, arg2): ....
記住這個(gè)特殊的語(yǔ)法,后面我們會(huì)展示這個(gè)強(qiáng)大的語(yǔ)法糖
相關(guān)文章
python實(shí)現(xiàn)半自動(dòng)化發(fā)送微信信息
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)半自動(dòng)化發(fā)送微信信息,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
Python中unittest模塊做UT(單元測(cè)試)使用實(shí)例
這篇文章主要介紹了Python中unittest模塊做UT(單元測(cè)試)使用實(shí)例,本文直接給出待測(cè)試的類、測(cè)試類和測(cè)試結(jié)果以及測(cè)試總結(jié),需要的朋友可以參考下2015-06-06
Python計(jì)算兩個(gè)矩形重合面積代碼實(shí)例
這篇文章主要介紹了Python 實(shí)現(xiàn)兩個(gè)矩形重合面積代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
django 信號(hào)調(diào)度機(jī)制詳解
這篇文章主要介紹了django 信號(hào)調(diào)度機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
python多進(jìn)程(加入進(jìn)程池)操作常見案例
這篇文章主要介紹了python多進(jìn)程(加入進(jìn)程池)操作,結(jié)合常見案例形式分析了Python多進(jìn)程復(fù)制文件、加入進(jìn)程池及多進(jìn)程聊天等相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
解決django跨域的問題小結(jié)(Hbuilder X)
使用Django開發(fā)時(shí),可能會(huì)遇到跨域問題,尤其是當(dāng)后端與HbuilderX開發(fā)的前端結(jié)合使用時(shí),解決此問題的關(guān)鍵步驟包括安裝django-cors-headers庫(kù),并在Django的settings.py中進(jìn)行相應(yīng)配置,本文給大家介紹解決django跨域的問題小結(jié),感興趣的朋友一起看看吧2024-10-10
Python requests timeout的設(shè)置
這篇文章主要介紹了Python requests timeout的設(shè)置,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Pycharm使用Conda激活環(huán)境失敗的問題解決
本文主要介紹了Pycharm使用Conda激活環(huán)境失敗的問題解決,文中主要介紹了兩種問題的解決,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09

