Python class va functionlar (OOP)
Xammaga salom,
Bugun classlar bilan birgalikda funksiyalarni yana bir takrorlaymiz, va yana albatta yozgan kodimizda yangi uchragan amallarga izoh keltirishga harakat qilaman.
OOP o’zbekchasida OYD deyilsa kerak :), yani obektga yo’naltirilgan dasturlash. Bilmaganlar uchun qisqacha ma’lumot. OOP da xamma malumotlar obekt ko’rinishida bo’ladi, yani classlarning obektlari. Masalan Hayvonlar class deb qaralsa unda sizning mushugingiz o’sha classni obekti hisoblanadi. OOP da avlodlashtirish (nasledovanie) degan tushuncha bor, u haqidayam qisqacha aytib o’taman. Huddi o’sha Hayvonlar misolida ko’radigan bo’lsak «Uy hayvonlari» Hayvonlardan avlodlashtirilgan class hisoblanadi. yoki «Sut emizuvchilar», «Sudralib yuruvchilar» va ohir oqibat «Mushiklar» ham «Hayvonlar» classiga tegishli bir class hisoblanadi, a aynan sizning mushugingiz shu class obyekti. Quyidagi rasm ancha oydinlik kiritsa kerak (codeproject.comdan olindi):
Dasturlashda avlodlashtirishgan classlar child (farzand), a undan tepada turgan class esa parent deyiladi. Gap ko’payib ketti, tushunarsiz joylari bo’lsa qolgani commentlar yoki forum.opennet.uz da.
Endi praktikaga qaytadigan bo’lsak, kechagi darsimizdagi calculatorni class ko’rinishiga keltirishga harakat qilamiz. pythonda (va boshqa tillarda) math degan module bor (keyin ko’rib chiqarmiz :)), shunga o’xshagan class qilishga urinib ko’ramiz. O’rganishni tezlashtirish uchun bitta faylda bir nechta «mavzu» ni ko’rib ketishga harakat qilaman, aynan: comment,class yaratish, class construktori, modul import qilish (chaqirish), class metodlarini (funksiyalarini) chaqirish, global o’zgaruvchi va hakozolarni ko’rib o’tamiz:
import math
import random
#bu bir satrli comment
"""
bu
esa
ko'p
satrli
comment
"""
class Calculator(object):
#construktor
def __init__(self):
print "klass obekti yaratildi"
globalvar = 10
qoldiq_natijasi = 0
def qushish(self,a,b):
return a+b
def ayirish(self,a,b):
c=a-b
return c
def kupaytirish(self,a,b):
return a*b
def bulish(self,a,b):
return a/b
def daraja(self,a,b):
natija = a**b
return natija
def qoldiq(self,a,b):
self.qoldiq_natijasi = a%b
if __name__ == "__main__":
calc = Calculator()
a = 6
b = 2
print "qo'shish natijasi = %d" % calc.qushish(a,b)
natija = calc.ayirish(a,b)
print "ayirish natijasi = %d" % natija
print "ko'paytirish natijasi = %d" % calc.kupaytirish(a,b)
print "bo'lish natijasi = %d" % calc.bulish(a,b)
print "a ni b darajasi = %d" % calc.daraja(a,b)
#qoldiqni hisoblaymiz
calc.qoldiq(5,2)
print "5 ni 2 ga bo'lganda qoldiq = %d" % calc.qoldiq_natijasi
calc.qoldiq(8,2)
print "8 ni 2 ga bo'lganda qoldiq = %d" % calc.qoldiq_natijasi
print "math moduldan foydalangan holda daraja = %d" % math.pow(a,b)
# random (tasodifiy) son olamiz
rand = random.randint(0,99)
print "random moduldan tasodifiy butun son = %d" % rand
print "math moduldan tan = %d" % math.tan(rand)
Natija:
geniuz@sandy:~/projects$ python kalkulator.py
klass obekti yaratildi
qo'shish natijasi = 8
ayirish natijasi = 4
ko'paytirish natijasi = 12
bo'lish natijasi = 3
a ni b darajasi = 36
5 ni 2 ga bo'lganda qoldiq = 1
8 ni 2 ga bo'lganda qoldiq = 0
math moduldan foydalangan holda daraja = 36
random moduldan tasodifiy butun son = 46
math moduldan tan = -2
Bilmadim izoh keltirish shartmi yoki yo’q, mayli ayrim joylariga keltiraman:
classning metodlari uchun self parametri majburiy hisoblanadi, unda joriy classning obekti bo’ladi (ko’pchilik dasturlash tillarida this deyiladi).
globalvar va qoldiq_natijasi o’zgaruvchilar butun class uchun global hisoblanadi, ushbu global o’zgaruvchilardan metodlari ichida foydalanish uchun self orqali murojaat qilamiz. __init__ metodi konstruktor hisoblanib, classni obekti yaratilganda ishga tushadi. pythonni systemniy modullari judayam ko’p shulardan math va randomni chaqirib ishlatib ko’rdik. Iltimos xatolar bo’lsa xabar bering.
Davomi bor…
Texnologiyalar
Python class va functionlar (OOP)