Python'dagi ABC va abstractmethod haqida

Bu maqolamizda Python'dagi `ABC` va `abstractmethod` haqida gaplashamiz.
21th January 2025
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:
- Qoidalarni buzuvchi sinflar aniqlanadi va dastur ishlashidan oldin xatolarni ko'rsatadi.
- Tizimga yangi funksionallik qo'shish osonlashadi.
- 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?
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: