Stucking Decorators
Python Decorators haqida o'rganamiz.
Dekoratorlarni Birlashtirish
Ko‘pincha, bir funktsiya uchun faqat bitta dekorator ishlatiladi. Ammo bu majburiy emas. Siz bir nechta dekoratorlarni bitta funktsiyaga qo‘llashingiz mumkin.
Quyidagi misolni ko‘rib chiqaylik:
bold()
va italic()
dekoratorlari funktsiya tomonidan qaytarilgan qiymatga <b>
va <i>
HTML teglari qo‘shadi.
Dekoratorlar tartibi muhim: Python dekoratorlarni pastdan yuqoriga (ya'ni, funktsiyaga eng yaqin dekorator birinchi qo‘llanadi), lekin dekoratsiya qilingan funktsiyani yuqoridan pastga (ya'ni, manba kodida qanday ko‘rsatilgan bo‘lsa) chaqiradi. Shunday qilib, bu misolda formatted_text
avval ta'riflanadi, keyin italic
dekoratori qo‘llaniladi va oxirida bold()
dekoratori qo‘llaniladi; dekoratsiya qilingan formatted_text
funktsiyasi chaqirilganda, avval bold
ishga tushadi, keyin italic
ishlaydi va nihoyat, asl formatted_text
chaqiriladi.
Ushbu kodni ishga tushirganingizda, quyidagi natijani ko‘rasiz:
Bir nechta dekoratorlarni qanday qo‘llayotganingizni yaxshiroq tushunishingiz uchun, bu misolni shunday yozamizki, har bir dekorator qaysi funktsiyaga qo‘llanayotganini chop etsin:
Bu kodni ishga tushirganingizda quyidagi natijani ko‘rasiz:
Bu misol formatted_text()
funktsiyasi italic()
dekoratori tomonidan o‘ralganligini, keyin italic()
dekoratori tomonidan yaratilgan italic_wrapper()
funktsiyasining bold()
dekoratori tomonidan o‘ralganligini ko‘rsatadi.
Endi dekoratorlarga argumentlarni qanday uzatishni o‘rganamiz!
Last updated on