19-ámeliy jumıs: Python programmalastırıw tilinde klasslar/obyektler
- TEORIYALÍQ BÓLIM
Klass - bul obyekt jaratıw ushın arnalǵan shablon. Obyekt - bul klasstıń konkret úlgisi.
Klasstıń tiykarǵı elementleri:
- Attributlar (qásiyetler)
- Metodlar (funkciyalar)
- Konstruktor (init)
Klasslar koncepciyaları:
- Encapsulation (Jasırıw)
- Inheritance (Miyrasxorlıq)
- Polymorphism (Kóp túrlilik)
- ÁMELIY BÓLIM
- 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()}")
- 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())
- 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()}")
- 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()}")
- 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")
- 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:
- 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ı
- 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ı
- 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ı
- 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
- 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
- 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:
- 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))
- 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())
- 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
- 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
- Klasstıń tiykarǵı elementlerin kórsetiń: a) Tek metodlar b) Tek konstruktor c) Attributlar, metodlar hám konstruktor d) Tek attributlar
- Private attributtı qanday belgi menen belgilemiz? a) _ b) __ c) # d) $
- 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
- 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
- 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
- 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
- self parametri neni bildiredi? a) Klasstıń atın b) Házirgı instanciyanı c) Klasstıń metodın d) Klasstıń attributın
- Konstruktordıń wazıypası qanday? a) Klasstı óshiriw b) Klassqa metod qosıw c) Obyekttiń dáslepki qásiyetlerin belgilew d) Klasstıń atın ózgertiw
- 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