19-ámeliy jumıs: Python programmalastırıw tilinde klasslar/obyektler

  1. TEORIYALÍQ BÓLIM

Klass - bul obyekt jaratıw ushın arnalǵan shablon. Obyekt - bul klasstıń konkret úlgisi.

Klasstıń tiykarǵı elementleri:

  1. Attributlar (qásiyetler)
  2. Metodlar (funkciyalar)
  3. Konstruktor (init)

Klasslar koncepciyaları:

  • Encapsulation (Jasırıw)
  • Inheritance (Miyrasxorlıq)
  • Polymorphism (Kóp túrlilik)
  1. ÁMELIY BÓLIM
  1. Tiykarǵı klass jaratıw:

classOqıwshı:
    def__init__(self, atı, jasí):
        self.atı = atı
        self.jasí = jasí
        self.bahalar = []
   
    defbaha_qosıw(self, baha):
        self.bahalar.append(baha)
   
    deforta_baha(self):
        iflen(self.bahalar) > 0:
            returnsum(self.bahalar) / len(self.bahalar)
        return0
 
# Qollanıw
oqıwshı1 = Oqıwshı("Azamat", 20)
oqıwshı1.baha_qosıw(5)
oqıwshı1.baha_qosıw(4)
print(f"Orta baha: {oqıwshı1.orta_baha()}")

  1. Miyrasxorlıq mısalı:

classAdam:
    def__init__(self, atı, jasí):
        self.atı = atı
        self.jasí = jasí
   
    deftanıstırıw(self):
        returnf"Men {self.atı}, {self.jasí} jastaman"
 
classStudent(Adam):
    def__init__(self, atı, jasí, kurs):
        super().__init__(atı, jasí)
        self.kurs = kurs
   
    deftanıstırıw(self):
        returnf"Men {self.atı}, {self.kurs}-kurs studentimen"
 
# Qollanıw
adam1 = Adam("Berdaq", 25)
student1 = Student("Gúlnara", 19, 2)
 
print(adam1.tanıstırıw())
print(student1.tanıstırıw())

  1. Encapsulation mısalı:

classBank_schet:
    def__init__(self, iyesi, balans):
        self.__iyesi = iyesi  # private attribute
        self.__balans = balans
   
    defbalans_kóriw(self):
        return self.__balans
   
    defaqsha_salıw(self, summa):
        if summa > 0:
            self.__balans += summa
            returnTrue
        returnFalse
   
    defaqsha_alıw(self, summa):
        if summa <= self.__balans:
            self.__balans -= summa
            returnTrue
        returnFalse
 
# Qollanıw
schet = Bank_schet("Alisher", 1000000)
schet.aqsha_salıw(500000)
print(f"Házirgi balans: {schet.balans_kóriw()}")

  1. Kóp túrlilik (Polymorphism) mısalı:

classFigura:
    defmaydan(self):
        pass
 
classTórtmúyesh(Figura):
    def__init__(self, a, b):
        self.a = a
        self.b = b
   
    defmaydan(self):
        return self.a * self.b
 
class Úshmúyesh(Figura):
    def__init__(self, a, h):
        self.a = a
        self.h = h
   
    defmaydan(self):
        return0.5 * self.a * self.h
 
# Qollanıw
tort = Tórtmúyesh(5, 4)
ush = Úshmúyesh(6, 3)
 
print(f"Tórtmúyesh maydanı: {tort.maydan()}")
print(f"Úshmúyesh maydanı: {ush.maydan()}")

  1. Property dekoratorlar menen islew:

classTemperature:
    def__init__(self, celsius):
        self._celsius = celsius
   
    @property
    defcelsius(self):
        return self._celsius
   
    @celsius.setter
    defcelsius(self, value):
        if value < -273.15:
            raise ValueError("Temperature cannot be below absolute zero")
        self._celsius = value
   
    @property
    deffahrenheit(self):
        return self._celsius * 9/5 + 32
 
# Qollanıw
temp = Temperature(25)
print(f"Celsius: {temp.celsius}")
print(f"Fahrenheit: {temp.fahrenheit}")
temp.celsius = 30
print(f"Jańa temperatura: {temp.celsius}°C") 

  1. Statikalıq metodlar:

classCalculator:
    @staticmethod
    defqosıw(a, b):
        return a + b
   
    @staticmethod
    defalıw(a, b):
        return a - b
   
    @staticmethod
    defkóbeytiw(a, b):
        return a * b
   
    @staticmethod
    defbóliw(a, b):
        if b != 0:
            return a / b
        return"Nolge bóliw múmkin emes"
 
# Qollanıw
print(Calculator.qosıw(5, 3))
print(Calculator.kóbeytiw(4, 2))

 

Keliń, hár bir kodtı bólip-bólip túsindirip shıǵayıq:

  1. OQÍWSHÍ KLASÍ:

classOqıwshı:
    def__init__(self, atı, jasí):
        self.atı = atı        # oqıwshınıń atı
        self.jasí = jasí      # oqıwshınıń jası
        self.bahalar = []     # bahalar dizimi
   
    defbaha_qosıw(self, baha):
        self.bahalar.append(baha)  # jańa baha qosıw
   
    deforta_baha(self):
        iflen(self.bahalar) > 0:
            returnsum(self.bahalar) / len(self.bahalar)  # orta bahanı esaplaw
        return0
 
# Qollanıw mısalı
oqıwshı1 = Oqıwshı("Azamat", 20)  # jańa oqıwshı jaratıw
oqıwshı1.baha_qosıw(5)            # bahalar qosıw
oqıwshı1.baha_qosıw(4) 

Bul klasstıń:

  • Konstruktorı (init) - oqıwshınıń atı hám jasın saqlaydı
  • baha_qosıw() - jańa baha qosadı
  • orta_baha() - barlıq bahalardıń orta arifmetikalıq mánisin esaplaydı
  1. MIYRASXORLÍQ MÍSALI:

classAdam:
    def__init__(self, atı, jasí):
        self.atı = atı
        self.jasí = jasí
   
    deftanıstırıw(self):
        returnf"Men {self.atı}, {self.jasí} jastaman"
 
classStudent(Adam):  # Adam klassınan miyras aladı
    def__init__(self, atı, jası, kurs):
        super().__init__(atı, jası)  # ata-klass konstruktorın shaqırıw
        self.kurs = kurs
   
    deftanıstırıw(self):  # metodtı qayta jazıw (override)
        returnf"Men {self.atı}, {self.kurs}-kurs studentimen" 

Bul mısalda:

  • Adam - tiykarǵı klass (ata-klass)
  • Student - Adam klassınan miyras alǵan klass (bala-klass)
  • super().init() - ata-klass konstruktorın shaqırıw ushın qollanıladı
  1. ENCAPSULATION (JASÍRÍW) MÍSALÍ:

classBank_schet:
    def__init__(self, iyesi, balans):
        self.__iyesi = iyesi    # private attribute (__)
        self.__balans = balans  # private attribute
   
    defbalans_kóriw(self):
        return self.__balans
   
    defaqsha_salıw(self, summa):
        if summa > 0:
            self.__balans += summa
            returnTrue
        returnFalse

Bul mısalda:

  • __ belgisi menen baslanǵan attributlar private boladı
  • Tek klasstıń metodları arqalı ǵana private attributlarǵa kiriwge boladı
  • Bul maǵlıwmatlardı jasırıw hám qorǵaw ushın qollanıladı
  1. POLYMORPHISM (KÓP TÚRLILIK) MÍSALI:

classFigura:
    defmaydan(self):
        pass
 
classTórtmúyesh(Figura):
    defmaydan(self):
        return self.a * self.b
 
class Úshmúyesh(Figura):
    defmaydan(self):
        return0.5 * self.a * self.h 

Bul mısalda:

  • Hár bir klass maydan() metodın óz jolı menen ámelge asıradı
  • Bir metod hár qıylı klasslar ushın hár qıylı isleydi
  1. PROPERTY DEKORATORLAR:

classTemperature:
    @property
    defcelsius(self):
        return self._celsius
   
    @celsius.setter
    defcelsius(self, value):
        if value < -273.15:
            raise ValueError("Temperature cannot be below absolute zero")
        self._celsius = value

Property dekoratorlar:

  • @property - attributqa oqıw múmkinshiligin beredi
  • @celsius.setter - attributqa jazıw múmkinshiligin beredi
  • Attributtı validaciya qılıwǵa járdem beredi
  1. STATIKALÍQ METODLAR:

classCalculator:
    @staticmethod
    defqosıw(a, b):
        return a + b 

Statikalıq metodlar:

  • Klasstıń instanciyasın jaratpay turíp shaqırıw múmkin
  • self parametri talap etilmeydi
  • Klass attributlarına tikkeley kire almadı

ÁMELIY MÍSALLAR:

  1. Kitapxana sisteması:

classKitap:
    def__init__(self, atı, avtor, jılı):
        self.atı = atı
        self.avtor = avtor
        self.jılı = jılı
        self.bar = True  # kitap kitapxanada bar ma?
 
    defmaǵlıwmat(self):
        status = "bar"if self.bar else"alınǵan"
        returnf"'{self.atı}' - {self.avtor} ({self.jılı}) - {status}"
 
classOqıwshı:
    def__init__(self, atı, id):
        self.atı = atı
        self.id = id
        self.alǵan_kitaplar = []
 
    defkitap_alıw(self, kitap):
        if kitap.bar:
            self.alǵan_kitaplar.append(kitap)
            kitap.bar = False
            returnf"{self.atı} '{kitap.atı}' kitabın aldı"
        return"Kitap házirde joq"
 
    defkitap_qaytarıw(self, kitap):
        if kitap in self.alǵan_kitaplar:
            self.alǵan_kitaplar.remove(kitap)
            kitap.bar = True
            returnf"{self.atı} '{kitap.atı}' kitabın qaytardı"
        return"Bul kitap sizde joq"
 
# Qollanıw
kitap1 = Kitap("Alpamıs", "Xalıq dástanı", 1999)
kitap2 = Kitap("Qaraqalpaq folklori", "Q.Ayımbetov", 2018)
 
oqıwshı1 = Oqıwshı("Arıslan", "ID001")
oqıwshı2 = Oqıwshı("Gúlnara", "ID002")
 
print(kitap1.maǵlıwmat())
print(oqıwshı1.kitap_alıw(kitap1))
print(kitap1.maǵlıwmat())
print(oqıwshı1.kitap_qaytarıw(kitap1)) 

  1. Bank esap sisteması:

classBank_schet:
    def__init__(self, iyesi, schet_nomeri):
        self.__iyesi = iyesi
        self.__schet_nomeri = schet_nomeri
        self.__balans = 0
        self.__transport = []
 
    defaqsha_salıw(self, summa):
        if summa > 0:
            self.__balans += summa
            returnf"{summa} sum qosıldı. Jańa balans: {self.__balans}"
        return"Nadurıs summa"
 
    defaqsha_alıw(self, summa):
        if0 < summa <= self.__balans:
            self.__balans -= summa
            returnf"{summa} sum alındı. Qalǵan balans: {self.__balans}"
        return"Balans jetkilisiz"
   
    deftransport_qosıw(self, transport_túri):
        self.__transport.append(transport_túri)
        returnf"{transport_túri} qosıldı"
 
    defbalans_kóriw(self):
        returnf"Házirgi balans: {self.__balans} sum"
 
    deftransportlar(self):
        returnf"Sizde {len(self.__transport)} transport bar: {', '.join(self.__transport)}"
 
# Qollanıw
schet1 = Bank_schet("Alisher", "1234567890")
print(schet1.aqsha_salıw(1000000))
print(schet1.aqsha_alıw(500000))
print(schet1.transport_qosıw("Nexia-3"))
print(schet1.transport_qosıw("Damas"))
print(schet1.transportlar())

  1. Onlayn dúkan:

class Ónim:
    def__init__(self, atı, baǵası, sanı):
        self.atı = atı
        self.baǵası = baǵası
        self.sanı = sanı
 
    defmaǵlıwmat(self):
        returnf"{self.atı} - {self.baǵası} sum ({self.sanı} dana bar)"
 
classSebet:
    def__init__(self):
        self.ónimler = {}
        self.ulıwma_baǵa = 0
 
    def ónim_qosıw(self, ónim, sanı):
        if ónim.sanı >= sanı:
            if ónim in self.ónimler:
                self.ónimler[ónim] += sanı
            else:
                self.ónimler[ónim] = sanı
            ónim.sanı -= sanı
            self.ulıwma_baǵa += ónim.baǵası * sanı
            returnf"{sanı} dana {ónim.atı} sebetke qosıldı"
        return"Ónim jetkilisiz"
 
    defsebetti_kóriw(self):
        text = "Sebette:\n"
        for ónim, sanı in self.ónimler.items():
            text += f"{ónim.atı} - {sanı} dana = {ónim.baǵası * sanı} sum\n"
        text += f"\nUlıwma baǵa: {self.ulıwma_baǵa} sum"
        return text
 
# Qollanıw
alma = Ónim("Alma", 15000, 100)
nok = Ónim("Nok", 20000, 50)
banan = Ónim("Banan", 25000, 30)
 
sebetim = Sebet()
print(sebetim.ónim_qosıw(alma, 5))
print(sebetim.ónim_qosıw(nok, 3))
print(sebetim.ónim_qosıw(banan, 2))
print(sebetim.sebetti_kóriw())

 

TEST

  1. Klass nege arnalǵan? a) Maǵlıwmatlardı saqlaw ushın b) Obyekt jaratıw ushın arnalǵan shablon c) Funkciyalardı saqlaw ushın d) Tek metodlardı saqlaw ushın
  2. Klasstıń tiykarǵı elementlerin kórsetiń: a) Tek metodlar b) Tek konstruktor c) Attributlar, metodlar hám konstruktor d) Tek attributlar
  3. Private attributtı qanday belgi menen belgilemiz? a) _ b) __ c) # d) $
  4. Property dekoratorlardıń tiykarǵı wazıypası qanday? a) Klassqa jańa metod qosıw b) Attributqa oqıw hám jazıw múmkinshiligin basqarıw c) Klassqa jańa attribut qosıw d) Klasstı qayta ataw
  5. Statikalıq metodtıń ózgesheligi nede? a) Klasstıń instanciyasın jaratıwdı talap etedi b) self parametrin talap etedi c) Klasstıń instanciyasın jaratpay turıp shaqırıw múmkin d) Tek bir márte shaqırıw múmkin
  6. Miyrasxorlıqta super() funkciyası ne ushın qollanıladı? a) Jańa klass jaratıw ushın b) Ata-klass konstruktorın shaqırıw ushın c) Metodtı óshiriw ushın d) Attributtı óshiriw ushın
  7. Polymorphism (kóp túrlilik) degenimiz ne? a) Bir metodtıń hár qıylı klasslarda hár qıylı islewi b) Bir klassqa kóp attribut qosıw c) Bir klasstıń bir neshe instanciyasın jaratıw d) Bir neshe klasstı birlestiriw
  8. self parametri neni bildiredi? a) Klasstıń atın b) Házirgı instanciyanı c) Klasstıń metodın d) Klasstıń attributın
  9. Konstruktordıń wazıypası qanday? a) Klasstı óshiriw b) Klassqa metod qosıw c) Obyekttiń dáslepki qásiyetlerin belgilew d) Klasstıń atın ózgertiw
  10. Encapsulation (jasırıw) principiniń tiykarǵı maqseti ne? a) Maǵlıwmatlardı jasırıw hám qorǵaw b) Maǵlıwmatlardı kóshiriw c) Maǵlıwmatlardı joq etiw d) Maǵlıwmatlardı kóbeytiw

Durıs juwaplar: 1-b, 2-c, 3-b, 4-b, 5-c, 6-b, 7-a, 8-b, 9-c, 10-a