Python'dagi ABC va abstractmethod haqida

Python abstract base classes

Bu maqolamizda Python'dagi `ABC` va `abstractmethod` haqida gaplashamiz.

21th January 2025

pythonabstractmethodprotocol

Assalom alaykum, bugun siz bilan Python'dagi foydali bo'lgan abc (Abstract Base Classes) moduli haqida gaplashamiz. Balki bu nom biroz murakkab tuyulishi mumkin, lekin aslida juda oddiy va foydali tushuncha. Bu modul yordamida kodimizga qattiqroq qoidalar kiritamiz va hammasini bir xil tartibda ishlashini ta'minlaymiz.

ABC va abstractmethod nima va nega kerak?

ABC (Abstract Base Class) - bu klasslarning qanday metodlari bo'lishi kerakligini belgilaydigan shablon. Abstract metodlar esa @abstractmethod dekoratori yordamida yaratiladi. Masalan, siz "Transport" degan shablon yaratdingiz va unda barcha transport vositalarida bo'lishi kerak bo'lgan metodlarni belgiladingiz. Ularni belgilashdan maqsad: sinfga asoslangan boshqa sinflar ushbu metodlarni albatta o'zida aniqlashi kerak bo'lishidir.

Misol uchun, sizda "Transport" degan umumiy tushuncha bor. Bu tushuncha barcha transport turlari uchun umumiy funksionallikni talab qiladi, masalan, harakatlanish va to'xtash. Lekin avtomobil va samolyot bir xil harakat qilmaydi, to'g'rimi? Aynan shunday vaziyatda abc juda qo'l keladi.

abc moduli qachon kerak bo'ladi:

  • Kod intizomini ta'minlash uchun: Dasturdagi barcha sinflar ma'lum bir standartga rioya qiladi.
  • Kodni tozalash uchun: Har bir sinf faqat o'ziga tegishli funksiyalarni aniqlaydi.
  • Moslashuvchanlik uchun: Yangi transport turi qo'shilganda kodni qayta yozishingizga hojat qolmaydi.
  • Komanda bilan ishlashda: Birgalikda ishlaydigan dasturchilar uchun aniq shablon beradi.

abc moduli qayerdan kelib chiqqan?

abc moduli Python 2.6 va 3.0 versiyalaridan boshlab joriy qilingan. Dastur kodida tartib-intizomni ta'minlash uchun uni Java, C# kabi boshqa dasturlash tillaridagi "abstract class" tushunchasidan ilhomlanib yaratishgan.

Kodni qanday o'zgartiradi?

abc yordamida yozilgan kodda:

  1. Qoidalarni buzuvchi sinflar aniqlanadi va dastur ishlashidan oldin xatolarni ko'rsatadi.
  2. Tizimga yangi funksionallik qo'shish osonlashadi.
  3. Kodni o'qish va tushunish qulay bo'ladi.

Keling, qadam-baqadam kod yozamiz!

1. Boshlanishi: abc modulini import qilish

from abc import ABC, abstractmethod

2. Abstract bazaviy klass yaratish

class Transport(ABC):

    @abstractmethod
    def move(self):
        """Harakatlanish metodi"""
        pass

    @abstractmethod
    def stop(self):
        """To'xtash metodi"""
        pass

Bu yerda biz Transport degan umumiy shablon yaratdik. U "harakatlanish" va "to'xtash" funksiyalarini talab qiladi, lekin ularning mazmunini o'zida saqlamaydi.

3. Meros olish va metodlarni aniqlash

class Car(Transport):
    def move(self):
        print("Avtomobil yo'lda harakatlanmoqda.")

    def stop(self):
        print("Avtomobil to'xtadi.")

class Airplane(Transport):
    def move(self):
        print("Samolyot havoga ko'tarilmoqda.")

    def stop(self):
        print("Samolyot qo'nish yo'lagida to'xtadi.")

Bu yerda Car va Airplane sinflari Transport sinfidan meros oldi va o'ziga xos funksiyalarini aniqladi.

4. Sinflar bilan ishlash

Endi ushbu sinflarni qanday ishlatish mumkinligini ko'rib chiqamiz:

def manage_transport(transport):
    transport.move()
    transport.stop()

car = Car()
airplane = Airplane()

manage_transport(car)
manage_transport(airplane)

Natija:

Avtomobil yo'lda harakatlanmoqda.
Avtomobil to'xtadi.
Samolyot havoga ko'tarilmoqda.
Samolyot qo'nish yo'lagida to'xtadi.

abc modulisiz nima bo'lar edi?

calculator example

Agar abc modulisiz kod yozganimizda, Transport sinfiga meros olgan boshqa sinflar harakatlanish va to'xtash funksiyalarini aniqlamasligi ham mumkin edi. Bu esa dasturda chalkashlik va xatolarga olib kelardi.

Misol uchun, quyidagi kod noto'g'ri ishlaydi:

class Bike(Transport):
    pass

bike = Bike()  # Xato: move() va stop() metodlari aniqlanmagan.

abc bu kabi xatolarga yo'l qo'ymaslikka yordam beradi.

Python protokollari haqida qisqacha

abc bilan bir qatorda Python'da yana bir kuchli tushuncha - protokollar mavjud. Protokollar aslida informal yoki formal bo'lishi mumkin. Protokollar yordamida sinflarning qanday metodlar va atributlarga ega bo'lishini aniqlash mumkin.

Masalan, Python 3.8 versiyasidan boshlab typing moduliga kiritilgan Protocol klassi yordamida abstrakt metodlarni aniqlamasdan ham sinfga shablon yaratish mumkin. Bu esa sinflar qaysidir protokolga mos kelishini tekshirishni osonlashtiradi.

Protocol va abc ning o'xshash tomoni shundaki, ikkisi ham kod intizomini va moslashuvchanlikni ta'minlashga xizmat qiladi. Farqi shundaki, Protocol yordamida metodlarni abstrakt qilish shart emas, ya'ni sinf ichida ularga biror bir realizatsiya berilishi mumkin.

Keyingi maqolamizda Python'dagi protokollar haqida batafsil gaplashamiz va ularning amaliy dasturdagi o'rnini misollar bilan tushuntiramiz. Kuzatishda davom eting! 😉

Xulosa

abc moduli Python dasturlarida shablonlar yaratish uchun kuchli vosita. U dasturingizni:

  • Tushunarli,
  • Moslashuvchan,
  • Xatosiz qilishga yordam beradi.

Agar siz ham katta loyihalarda yoki birgalikda ishlashni rejalashtirayotgan bo'lsangiz, abc moduli siz uchun juda foydali bo'ladi.

Siz qanday loyihalarda abc dan foydalanasiz? Fikr va tajribangizni yozib qoldiring!

Foydalangan manbalar:


🔥 Yangi maqola va postlarni o'tkazib yubormaslik uchun @DavronbekDev telegram kanalga obuna bo'ling!