Python's Built-in Decorators

Python Decorators haqida o'rganamiz.

SU

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:

# classmethod_example.py
 
class Time:
    """24 soatlik vaqtni ifodalovchi misol sinf"""
 
    def __init__(self, hour, minute):
        self.hour = hour
        self.minute = minute
 
    def __repr__(self):
        return "Time(%d, %d)" % (self.hour, self.minute)
 
    @classmethod
    def from_float(cls, moment):
        """2.5 == 2 soat, 30 daqiqa, 0 soniya, 0 mikrosaniyalar"""
        hours = int(moment)
        if hours:
            moment = moment % hours
        minutes = int(moment * 60)
        return cls(hours, minutes)
 
    def to_float(self):
        """O'zini float tipidagi son sifatida qaytaradi"""
        return self.hour + self.minute / 60
 
# Misollar
Time(7, 30)
Time.from_float(5.75)
t = Time(10, 15)
t.to_float()

Bu kodni ishga tushirganda, quyidagi natijani ko'rasiz:

Time(7, 30)
Time(5, 45)
10.25

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

On this page

Xato haqida xabar berish