Sinflar (class) va obyektlar — dasturlashda tub burilish nuqtasi. Shu paytgacha biz alohida ma’lumotlar bilan ishladik. Endi esa ma’lumot va u ustidagi amallarni bitta yaxlit birlikka jamlashni o’rganamiz. Bu obyektga yo’naltirilgan dasturlash (OOP) deb ataladi va deyarli barcha jiddiy loyihalar aynan shu tamoyilga asoslanadi.
Sinf (class) — obyektlar yaratish uchun andoza yoki chizma. U obyektning qanday ma’lumotlarga (atribut) va qanday xatti-harakatlarga (metod) ega bo’lishini belgilaydi. Obyekt esa shu andoza asosida yaratilgan aniq nusxadir.
Birinchi sinf
Sinf class kalit so’zi bilan e’lon qilinadi. Keling, oddiy Mahsulot sinfini yaratamiz:
class Mahsulot:
def __init__(self, nomi, narxi):
self.nomi = nomi
self.narxi = narxi
telefon = Mahsulot("iPhone", 12000000)
print(telefon.nomi)
print(telefon.narxi)
iPhone
12000000
Bu yerda ikki tushuncha muhim. __init__ — bu konstruktor, obyekt yaratilganda avtomatik ishlaydigan maxsus metod. self esa — yaratilayotgan obyektning o’ziga ishora; u orqali biz atributlarni obyektga bog’laymiz.
Metodlar — obyektning xatti-harakati
Sinf faqat ma’lumot saqlamaydi, balki amal ham bajaradi. Sinf ichidagi funksiyalar metod deb ataladi:
class Mahsulot:
def __init__(self, nomi, narxi):
self.nomi = nomi
self.narxi = narxi
def chegirma(self, foiz):
self.narxi = self.narxi - self.narxi * foiz / 100
return self.narxi
telefon = Mahsulot("iPhone", 12000000)
print(telefon.chegirma(10))
10800000.0
chegirma metodi obyektning o’z narxi atributini o’zgartirdi. E’tibor bering: har bir metodning birinchi argumenti doim self — u orqali metod o’z obyektining ma’lumotlariga kiradi.
Bir sinf — ko’p obyekt
Sinfning butun kuchi shundaki, bitta andozadan istagancha mustaqil obyekt yaratsa bo’ladi. Har biri o’z ma’lumotini saqlaydi:
class Foydalanuvchi:
def __init__(self, ism, yosh):
self.ism = ism
self.yosh = yosh
def tanishtir(self):
print(f"Men {self.ism}, yoshim {self.yosh}")
a = Foydalanuvchi("Farrux", 26)
b = Foydalanuvchi("Master Sherkulov", 30)
a.tanishtir()
b.tanishtir()
Men Farrux, yoshim 26
Men Master Sherkulov, yoshim 30
a va b — bir sinfdan yaratilgan, ammo butunlay mustaqil ikki obyekt. Biri o’zgarsa, ikkinchisiga ta’sir qilmaydi.
str — obyektni chiroyli chiqarish
Odatiy holda obyektni print qilsangiz, tushunarsiz manzil chiqadi. Buni __str__ maxsus metodi orqali chiroyli qilamiz:
class Mahsulot:
def __init__(self, nomi, narxi):
self.nomi = nomi
self.narxi = narxi
def __str__(self):
return f"{self.nomi} — {self.narxi} so'm"
print(Mahsulot("Noutbuk", 8500000))
Noutbuk — 8500000 so'm
Aslida siz bu naqshni loyihada allaqachon ko’rgansiz: Django modellaridagi def __str__(self): metodi aynan shu maqsadda — obyektni o’qiladigan matnga aylantirish uchun yoziladi.
Xulosa
Bu darsda sinf va obyekt tushunchasini, __init__ konstruktori, self, metodlar va __str__ bilan tanishdik. OOP — bu ma’lumot va xatti-harakatni bir joyga jamlash san’ati, va u katta loyihalarni boshqarishning kalitidir. Keyingi darsda meros (inheritance) — sinflarni kengaytirish mavzusiga o’tamiz.