Python's Built-in Decorators
Python Decorators haqida o'rganamiz.
Pythonning O'zida Mavjud Dekoratorlari
Python bir nechta o'zida mavjud dekoratorlar bilan birga keladi. Ularning uchtasi import qilmasdan foydalanishingiz mumkin. Bu dekoratorlar, ayniqsa, sinflarni ta'riflashda foydalidir.
Bu uchta dekorator quyidagilar:
classmethodstaticmethodproperty
Python'da boshqa dekoratorlar ham mavjud. Ulardan biri functools modulida joylashgan bo'lib, wraps deb nomlanadi. Bu dekorator, asl funksiyaning nomi va docstring'ini saqlab qolishda juda foydalidir. Dekorator yaratganingizda, u asl funktsiyani yangi bilan almashtiradi, shuning uchun uning nomi va docstring'ini yo'qotishingiz mumkin. functools.wraps yordamida bu muammoni hal qilishingiz mumkin.
Boshqa mashhur dekoratorlar functools.lru_cache va contextlib modulidagi ba'zi qiziqarli dekoratorlar hisoblanadi. Agar vaqtingiz bo'lsa, bu kutubxonalarni hujjatlarda tekshirishni tavsiya qilaman.
classmethod Dekoratori
classmethod dekoratori, sinfning metodini, undan instansiya ma'lumotlari kerak bo'lmagan holatlarda ishlatish uchun qo'llaniladi. Chunki bu metodlar instansiya ma'lumotlariga ehtiyoj sezmaydi, ularning birinchi argumenti self emas, balki sinfning o'zi bo'ladi (odatda cls deb qisqartiriladi, chunki class Python kalit so'zi hisoblanadi). classmethod-larning keng tarqalgan ishlatilishidan biri — ular alternativ konstruktor sifatida ishlatiladi. Yangi fayl yaratib, quyidagi kodni qo'shing:
Bu kodni ishga tushirganda, quyidagi natijani ko'rasiz:
staticmethod Dekoratori
staticmethod dekoratori Python'ga metodning sinf yoki instansiya ma'lumotlarini talab qilmasligini bildiradi; shu sababli, birinchi parametr sifatida self yoki clsni ko'rsatish shart emas. staticmethod'larni yuqoridagi misolda ko'rganingizdek, ikkala usulda ham chaqirishingiz mumkin: sinfni bevosita ishlatib yoki avval instansiyani yaratib.
property Dekoratori
Bu uchta dekorator orasida eng foydalisi property dekoratoridir. Kelasi bo'limda, nima uchun property dekoratori eng qulay ekanligini ko'rib chiqamiz!
Last updated on