Darsliklar Python Sinflari va Obyektlari

Python Python Sinflari va Obyektlari

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.