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:
classmethod
staticmethod
property
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 cls
ni 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