Obyekt va klasslar bilan tanishish
Oldingi darsda biz Python OOP haqida bilib oldik. Python obyektlar va klasslar tushunchasini ham qo'llab-quvvatlashini bilamiz.
Obyekt — oddiygina ma'lumotlar (o'zgaruvchilar) va metodlar (funksiyalar) to'plami. Xuddi shunday, klass — o'sha obyekt uchun chizma (blueprint).
Obyektlar haqida o'rganishdan oldin, keling avval Pythonda klasslar haqida o'rganamiz.
Klass obyektlarning chizmasi hisoblanadi.
Klassni uy eskizi (prototipi) sifatida tasavvur qilishimiz mumkin. U qavatlar, eshiklar, derazalar va h.k. haqidagi barcha tafsilotlarni o'z ichiga oladi.
Shu tavsiflarga asoslanib, biz uyni quramiz; uy — obyekt.
Bitta tavsifdan ko'plab uylar qurilishi mumkin bo'lgani uchun, biz bitta klassdan ko'plab obyektlar yaratishimiz mumkin.
Python klassini aniqlash
Pythonda klass yaratish uchun class kalit so'zidan foydalanamiz. Masalan,
class ClassName:
# klass e'loni
Bu yerda, biz ClassName nomli klass yaratdik.
Keling, bir misolni ko'ramiz,
class Bike:
name = ""
gear = 0
Bu yerda,
Bike - klassning nominame/gear - klass ichidagi, mos ravishda "" va 0 standart qiymatlariga ega o'zgaruvchilar.Eslatma: Klass ichidagi o'zgaruvchilar atributlar (attributes) deb ataladi.
Obyekt klassning nusxasi (instance) deb ataladi.
Aytaylik, Bike — klass, unda biz shu klassdan bike1, bike2 va hokazo obyektlar yaratishimiz mumkin.
Mana obyekt yaratish sintaksisi.
objectName = ClassName()
Keling, bir misolni ko'ramiz,
# klass yaratish
class Bike:
name = ""
gear = 0
# klassning obyektini yaratish
bike1 = Bike()
Bu yerda, bike1 — klassning obyekti. Endi, klass atributlariga murojaat qilish uchun shu obyektdan foydalanishimiz mumkin.
Klass atributlariga murojaat qilish uchun . (nuqta) belgisidan foydalanamiz. Masalan,
# name xususiyatini o'zgartirish
bike1.name = "Mountain Bike"
# gear xususiyatiga murojaat qilish
bike1.gear
Bu yerda, biz mos ravishda name va gear atributlarining qiymatini o'zgartirish va unga murojaat qilish uchun bike1.name va bike1.geardan foydalandik.
1-misol: Python klass va obyektlari
# klassni aniqlash
class Bike:
name = ""
gear = 0
# klassning obyektini yaratish
bike1 = Bike()
# atributlarga murojaat qilish va yangi qiymat berish
bike1.gear = 11
bike1.name = "Mountain Bike"
print(f"Name: {bike1.name}, Gears: {bike1.gear} ")
Natija
Name: Mountain Bike, Gears: 11
Yuqoridagi misolda, biz ikkita atributga ega Bike nomli klassni aniqladik: name va gear.
Biz shuningdek Bike klassining bike1 obyektini ham yaratdik.
Nihoyat, biz . belgisi yordamida obyektning xususiyatlariga murojaat qildik va ularni o'zgartirdik.
Bitta klassdan bir nechta obyekt ham yaratishimiz mumkin. Masalan,
# klassni aniqlash
class Employee:
# xususiyatni aniqlash
employee_id = 0
# Employee klassining ikkita obyektini yaratish
employee1 = Employee()
employee2 = Employee()
# employee1 orqali xususiyatga murojaat qilish
employee1.employeeID = 1001
print(f"Employee ID: {employee1.employeeID}")
# employee2 orqali xususiyatlarga murojaat qilish
employee2.employeeID = 1002
print(f"Employee ID: {employee2.employeeID}")
Natija
Employee ID: 1001
Employee ID: 1002
Yuqoridagi misolda, biz Employee klassining ikkita obyektini yaratdik: employee1 va employee2.
Python klassi ichida funksiya ham aniqlashimiz mumkin. Klass ichida aniqlangan Python funksiyasi metod deb ataladi.
Keling, bir misolni ko'ramiz,
# klass yaratish
class Room:
length = 0.0
breadth = 0.0
# maydonni hisoblovchi metod
def calculate_area(self):
print("Area of Room =", self.length * self.breadth)
# Room klassining obyektini yaratish
study_room = Room()
# barcha xususiyatlarga qiymat berish
study_room.length = 42.5
study_room.breadth = 30.8
# klass ichidagi metodga murojaat qilish
study_room.calculate_area()
Natija
Area of Room = 1309.0
Yuqoridagi misolda, biz quyidagilarga ega Room nomli klass yaratdik:
length va breadthcalculate_area()Bu yerda, biz Room klassidan study_room nomli obyekt yaratdik.
Keyin biz length va breadth atributlariga qiymat berish uchun obyektdan foydalandik.
E'tibor bering, biz klass ichidagi metodni chaqirish uchun ham obyektdan foydalandik,
study_room.calculate_area()
Bu yerda, biz metodni chaqirish uchun . belgisidan foydalandik. Nihoyat, metod ichidagi operator bajarildi.
Ilgari biz klass atributiga standart qiymat berdik,
class Bike:
name = ""
...
# obyekt yaratish
bike1 = Bike()
Biroq, biz qiymatlarni konstruktorlar yordamida ham ishga tushirishimiz (initialize) mumkin. Masalan,
class Bike:
# konstruktor funksiyasi
def __init__(self, name = ""):
self.name = name
bike1 = Bike()
Bu yerda, __init__() — o'sha klassning yangi obyekti yaratilganda har safar chaqiriladigan konstruktor funksiyasi.
Yuqoridagi konstruktor name atributining qiymatini ishga tushiradi.
Biz bike1 obyektining name atributiga murojaat qilish uchun self.namedan foydalandik.
Agar klass ichidagi qiymatlarni ishga tushirish uchun konstruktordan foydalansak, klassning obyektini yaratishda mos qiymatni uzatishimiz kerak.
bike1 = Bike("Mountain Bike")
Bu yerda, "Mountain Bike" __init__()ning name parametriga uzatiladi.
Ko'proq o'qing: Python inheritance, Polymorphism in Python, Python object(), Python classmethod()