Decorators เป็น "wrappers" รันโค้ดก่อน/หลังฟังก์ชันที่ decorate โดยไม่แก้ฟังก์ชันต้นฉบับ สามารถ chain หลายตัวได้
ตัวอย่าง
def makebold(fn):
def wrapped():
return "" + fn() + ""
return wrapped
def makeitalic(fn):
def wrapped():
return "" + fn() + ""
return wrapped
@makebold
@makeitalic
def hello():
return "hello world"
print(hello())
ผลลัพธ์
<b><i>hello world</i></b>
ลำดับการทำงาน: @makebold @makeitalic เทียบเท่า makebold(makeitalic(hello)) decorator ใกล้ฟังก์ชันสุดทำงานก่อน