Using a Class as a Decorator
Python Decorators haqida o'rganamiz.
Dekorator sifatida Sinfdan Foydalanish
Argumentlarni qabul qiladigan dekorator yaratishning yana bir chiroyli usuli mavjud. Bu usul – maxsus sinf (class) yaratishdir.
Keling, yangi fayl yaratib, uni decorator_class.py
deb nomlab, quyidagi kodni qo'shamiz:
Sinf nomini barcha kichik harflarda yozish odatiy emas. Odatiy ravishda, sinflar nomi bosh harf bilan boshlanadi (title-case). Ammo boshqa misollar bilan bir xil bo'lishi uchun bu yerda kichik harflar bilan yozilgan.
Ushbu sinf faqat ikkita argumentni qabul qiladi. Siz *args va **kwargs-ni ham ishlatishingiz mumkin, ammo bu biroz murakkablashar edi. Bu misolni sodda va tushunarli qilish uchun faqat ikkita argumentni qabul qiluvchi sinf yaratdik. Sinf yaratildiganda, ikkita argumentni ob'ektning atributlari sifatida saqlaydi va ular haqida ma'lumot chiqaradi.
Keyingi qadam — __call__()
metodini yaratishdir. Bu maxsus metod sinfni chaqalanadigan qiladi. U dekoratsiya qilinayotgan funksiyani argument sifatida qabul qiladi. So'ngra, ushbu maxsus metod ichida wrapper()
funksiyasi joylashadi. E'tibor bering, wrapper()
funksiyasiga self
uzatilmaydi. U dekoratsiya qilinayotgan funktsiyaning argumentlari va kalit-argumentlarini qabul qiladi.
Qolgan kodlar avvalgi misoldagiga o'xshash.
Bu kodni ishga tushirsangiz, quyidagi natijani ko'rasiz:
Endi siz argumentlarni qabul qiladigan dekoratorni qanday yaratishni bilasiz — ikkala ichma-ich funksiyalar va sinf yordamida. Endi esa, Pythonning o'zida mavjud bo'lgan ba'zi dekoratorlar bilan tanishishga tayyorsiz!
Last updated on