星期一, 1月 01, 2007

[連結] Decorators make magic easy

http://www-128.ibm.com/developerworks/linux/library/l-cpdecor.html?ca=drs-

David Mertz, 著名的Charming Python系列作者的最新作品,
再度以這篇文章跟我們解釋了Decorators的用法.
由於Decorators大量的使用在Django中, 如果還沒有理解的,
這篇文章有非常多的解釋.

在Python2.4之前, 我們雖然經常使用decorator function,
但一直對Python沒有直接提供語法上的支援感到遺憾,
在Python 2.4中試圖引入了@這個decorator運算子,卻引起了大量的對於Python語法的爭議.
然而這段Decorator的語法爭議, 最後由Guido的仲裁中結束.

讓我簡單的說明的話,
decorator是用來讓function的logic能配合不同情況進行不同行為的一種方式,
而對於OOP語言來說, 這樣的技巧通常會使用meta class,
而對Python這種既支援functional programming又支援OOP的兼容性語言來說,
在很多狀況下, 無須使用meta programming,
而用decorator直接修改function是最方便的一種作法,
而django的每個view恰巧就是一個function,
所以如django的@login_required decorator就被大量的應用在django程式碼中.
這樣的decorator可以直接套用在有需要認證的view裡面, 無須對每個view分別修改其logic.

本文所提到的歷史部份可以參考:
http://www.python.org/cgi-bin/moinmoin/PythonDecorators

Guido對於@運算子的講解原文(僅供考古人士參考)

沒有留言: