Pythonda classlar va obyektlar
Python da sinf va obyektlar haqida batafsil ma'lumot.
So'nggi yangilanish: 2024-12-24Python dasturlash tilining eng muhim mavzularidan biri - Classes va Obyektlar haqida gaplashamiz. Bu tushunchalar Obyektga Yo'naltirilgan Dasturlash (OOP) paradigmasining asosini tashkil qiladi va murakkab dasturlar yaratishda juda muhim rol o'ynaydi.
Classes nima?
Class - bu obyektlarning xususiyatlari (atributlari) va xatti-harakatlarini (metodlarini) belgilaydigan shablon yoki eskizdir. U ma'lumotlar va funksiyalarni birlashtirib, yangi ma'lumot turini yaratadi.
Keling, oddiy misol bilan boshlaymiz:
class Avtomobil:
def __init__(self, marka, model, yil):
self.marka = marka
self.model = model
self.yil = yil
def malumot(self):
return f"{self.yil} {self.marka} {self.model}"
Bu yerda:
Avtomobil
- bu class nomi.__init__
- bu konstruktor metod, yangi obyekt yaratilganda chaqiriladi.self
- bu classning joriy namunasiga ishora qiladi.malumot
- bu class metodi.
Obyektlar nima?
Obyekt - bu classning aniq namunasidir. Agar class shablon bo'lsa, obyekt shu shablon asosida yaratilgan aniq narsadir.
Keling, Avtomobil
classidan obyekt yarataylik:
mening_avtomobilim = Avtomobil("Toyota", "Camry", 2022)
print(mening_avtomobilim.malumot()) # Natija: 2022 Toyota Camry
Bu yerda mening_avtomobilim
- bu Avtomobil
classining obyektidir.
Atributlar va Metodlar
Atributlar
Atributlar - bu classga yoki obyektga tegishli bo'lgan ma'lumotlar. Ular ikki turga bo'linadi:
- Namuna atributlari: Har bir obyekt uchun alohida.
- Class atributlari: Class darajasida e'lon qilinadi va barcha obyektlar uchun umumiy.
class Avtomobil:
avtomobil_soni = 0 # Class atributi
def __init__(self, marka, model):
self.marka = marka # Namuna atributi
self.model = model # Namuna atributi
Avtomobil.avtomobil_soni += 1
Metodlar
Metodlar - bu class ichida aniqlangan funksiyalardir. Ular uch turga bo'linadi:
- Namuna metodlari: Oddiy metodlar,
self
parametri bilan. - Class metodlari:
@classmethod
dekorator bilan,cls
parametri qabul qiladi. - Statik metodlar:
@staticmethod
dekorator bilan, naself
, nacls
qabul qilmaydi.
class Avtomobil:
avtomobil_soni = 0
def __init__(self, marka, model):
self.marka = marka
self.model = model
Avtomobil.avtomobil_soni += 1
def malumot(self): # Namuna metodi
return f"{self.marka} {self.model}"
@classmethod
def avtomobillar_soni(cls): # Class metodi
return f"Jami avtomobillar soni: {cls.avtomobil_soni}"
@staticmethod
def kompaniya_malumoti(): # Statik metod
return "Bu Avtomobil classi"
Inheritance (Vorislik)
Inheritance - bu bir classning xususiyatlarini boshqa classga o'tkazish mexanizmi. Bu kod qayta ishlatilishini ta'minlaydi va ierarxik munosabatlarni yaratish imkonini beradi.
class ElektrAvtomobil(Avtomobil):
def __init__(self, marka, model, batareya_quvvati):
super().__init__(marka, model)
self.batareya_quvvati = batareya_quvvati
def malumot(self):
return f"{super().malumot()}, Batareya quvvati: {self.batareya_quvvati} kWh"
tesla = ElektrAvtomobil("Tesla", "Model 3", 75)
print(tesla.malumot()) # Natija: Tesla Model 3, Batareya quvvati: 75 kWh
Bu yerda ElektrAvtomobil
classi Avtomobil
classidan voris oladi va uning funksionalligini kengaytiradi.
Encapsulation (Inkapsulyatsiya)
Inkapsulyatsiya - bu ma'lumotlarni va ularni boshqaradigan metodlarni birlashtirishdir. Python-da bu odatda shartli ravishda amalga oshiriladi, chunki Python "private" atributlarni to'liq qo'llab-quvvatlamaydi.
class BankHisobi:
def __init__(self, egasi, balans):
self.__egasi = egasi # Private atribut
self.__balans = balans # Private atribut
def balansni_korsat(self):
return f"Balans: ${self.__balans}"
def pul_qosh(self, miqdor):
if miqdor > 0:
self.__balans += miqdor
return f"${miqdor} qo'shildi. {self.balansni_korsat()}"
return "Noto'g'ri miqdor"
hisob = BankHisobi("Ali", 1000)
print(hisob.balansni_korsat()) # Natija: Balans: $1000
print(hisob.pul_qosh(500)) # Natija: $500 qo'shildi. Balans: $1500
# print(hisob.__balans) # Bu AttributeError chaqiradi
Polymorphism (Polimorfizm)
Polimorfizm - bu turli classlardagi obyektlarning bir xil nomli metodlarini chaqirish qobiliyati. Bu kod moslashuvchanligini oshiradi.
class Hayvon:
def ovoz(self):
pass
class It(Hayvon):
def ovoz(self):
return "Vov!"
class Mushuk(Hayvon):
def ovoz(self):
return "Myau!"
hayvonlar = [It(), Mushuk()]
for hayvon in hayvonlar:
print(hayvon.ovoz())
# Natija:
# Vov!
# Myau!
Amaliy mashq
Keling, o'rgangan bilimlarimizni mustahkamlash uchun kichik loyiha yarataylik. Kutubxona tizimini modellashtiruvchi classlar yaratamiz:
class Kitob:
def __init__(self, nomi, muallif, ISBN, nashr_yili):
self.nomi = nomi
self.muallif = muallif
self.ISBN = ISBN
self.nashr_yili = nashr_yili
self.mavjud = True
def malumot(self):
holat = "Mavjud" if self.mavjud else "Band"
return f"'{self.nomi}' by {self.muallif}, {self.nashr_yili} ({holat})"
class Kutubxona:
def __init__(self, nomi):
self.nomi = nomi
self.kitoblar = []
def kitob_qosh(self, kitob):
self.kitoblar.append(kitob)
return f"'{kitob.nomi}' kutubxonaga qo'shildi"
def kitob_qidirish(self, nomi):
for kitob in self.kitoblar:
if kitob.nomi.lower() == nomi.lower():
return kitob.malumot()
return "Kitob topilmadi"
def kitob_berish(self, nomi):
for kitob in self.kitoblar:
if kitob.nomi.lower() == nomi.lower() and kitob.mavjud:
kitob.mavjud = False
return f"'{kitob.nomi}' berildi"
return "Kitob mavjud emas yoki band"
# Kutubxonani yaratish va kitoblar qo'shish
kutubxonam = Kutubxona("Mening Kutubxonam")
kitob1 = Kitob("O'tgan kunlar", "Abdulla Qodiriy", "123456", 1926)
kitob2 = Kitob("Kecha va Kunduz", "Cho'lpon", "789012", 1936)
print(kutubxonam.kitob_qosh(kitob1))
print(kutubxonam.kitob_qosh(kitob2))
# Kitob qidirish va berish
print(kutubxonam.kitob_qidirish("O'tgan kunlar"))
print(kutubxonam.kitob_berish("O'tgan kunlar"))
print(kutubxonam.kitob_qidirish("O'tgan kunlar"))
Bu loyiha orqali biz classlar, obyektlar, metodlar va atributlardan foydalanishni, shuningdek inkapsulyatsiya va polimorfizm tamoyillarini amalda qo'llashni ko'rdik.
Xulosa
Classes va Obyektlar Python-da OOP-ning asosiy tushunchalaridir. Ular kodni tashkil qilish, qayta ishlatish va murakkab tizimlarni modellashtirish uchun kuchli vositalar taqdim etadi. Bu tushunchalarni yaxshi tushunish va qo'llash orqali siz yanada samarali va moslashuvchan dasturlar yaratishingiz mumkin.