Pythonda classlar va obyektlar

Python da sinf va obyektlar haqida batafsil ma'lumot.

So'nggi yangilanish: 2024-12-24

Python 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:

  1. Namuna atributlari: Har bir obyekt uchun alohida.
  2. 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:

  1. Namuna metodlari: Oddiy metodlar, self parametri bilan.
  2. Class metodlari: @classmethod dekorator bilan, cls parametri qabul qiladi.
  3. Statik metodlar: @staticmethod dekorator bilan, na self, na cls 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.

Qo'shimcha resurslar

  1. Python rasmiy hujjatlari - Classes
  2. Real Python - Object-Oriented Programming (OOP) in Python 3
  3. Coursera - Python Classes and Inheritance