KLASSNING XUSUSIYATLARI VA
METODLARI
Avvalgi darslarimizda biror klassdan yaratilgan har bir obyektning xususiyatlarini
klass
ichidagi
def __init__()
medoti yordamida berayotgan edik. Bu metod qanday ishlaydi? Biz
har gal klassga murojat qilganimizda klass aynan shu
__init__
metodini ishga tushiradi va biz
bergan xususiyatlar bilan yangi obyekt yaratadi.
Pythonda xususiyatlarni nafaqat obyektga balki to'g'ridan-to'g'ri klassga ham yuklash
imkoniyati
mavjud. Bunda klassning xususiyatiga berilgan qiymat barcha obyektlar uchun umumiy bo'ladi.
Bu xususiyatni bir obyekt orqali o'zgartirilganda shu klassga oid barcha obyektlarda ham uning
qiymati o'zgaradi.
Klassga
oid xususiyatlar
def __init__()
metodidan avval e'lon qilinadi.
Keling tushunarli bo'lishi uchun quyidagi misolni ko'ramiz:
class Avto:
"""Avtomobil klassi"""
num_avto = 0
def __init__(self,make,model,rang,yil,narh,km=0):
"""Avtomobilning xususiyatlari"""
self.make = make
self.model = model
self.rang = rang
self.yil = yil
self.narh = narh
self.__km = km
self.__id = uuid4()
Avto.num_avto += 1
Kodni tahlil qilamiz:
1-qatroda Avto klassini e'lo qildik
3-qatorda Avto klassiga oid bo'lgan
xususiyat
num_avto
yaratdik va unga 0 qiymatini
berdik
Keyingi qatorlarda
__init__
metodi yordamida klassdan yaratiladigan
obyektlarning
xususiyatlarini e'lon qildik va har gal bu metdoga murojat qilingandan
num_avto
ning
qiymatini
1
ga oshradigan qilib qo'ydik (13-qator).
Yuqoridagi usul bilan endi biz dastur davomida Avto klassidan
jami nechta obyektlar
yaratilganini kuzatib borishimiz mumkin bo'ladi. Bunda num_avto o'zgaruvchisiga istalgan
obyekt orqali yoki klass nomi orqali murojat qilish mumkin:
avto1 = Avto("GM","Malibu","Qora",2020,40000)
avto2 = Avto("GM","Lacetti","Oq",2020,20000)
print(avto1.num_avto)
Natija:
2
avto3 = Avto("Toyota",'Carolla',"Silver",2018, 45000)
print(Avto.num_avto)
Natija:
3
KLASSNING XUSUSIYATLARINI INKAPSULYATSIYA QILISH
Klassga oid xususiyatlar ham huddi yuoqridagi kabi nomidan avval ikki pastki chiziq qo'shish
bilan
inkapsulyatsiya qilinadi:
class Avto:
"""Avtomobil klassi"""
__num_avto = 0 # klassga oid xususiyat
def __init__(self,make,model,rang,yil,narh):
"""Avtomobilning xususiyatlari"""
self.make = make
self.model = model
self.rang = rang
self.yil = yil
self.narh = narh
Avto.__num_avto += 1
KLASSGA OID METODLAR
Klasslarning o'ziga xos metodlari ham bo'lishi mumkin. Misol uchun yuqoridagi num_avto xususiyatini
ko'rish uchun alohida metod yozishimiz mumkin. Klassga oid metodlar @classmethod dekoratori bilan
boshlanadi va obyektga oid metodlardan farqli ravishda
self
emas
cls
(class) argumentini
qabul
qiladi.
class Avto:
"""Avtomobil klassi"""
__num_avto = 0
def __init__(self,make,model,rang,yil,narh,km=0):
"""Avtomobilning xususiyatlari"""
self.make = make
self.model = model
self.rang = rang
self.yil = yil
self.narh = narh