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
self.__km = km
self.__id = uuid4()
Avto.__num_avto += 1
@classmethod
def get_num_avto(cls):
return cls.__num_avto
Klass metodlarga klassning nomi orqali murojat qilinadi:
avto1 = Avto("GM","Malibu","Qora",2020,40000)
avto2 = Avto("GM","Lacetti","Oq",2020,20000)
avto3 = Avto("Toyota",'Carolla',"Silver",2018, 45000)
print(Avto.get_num_avto())
Natija:
3
@classmethod
bu maxsus dekorator. Dekoratorlar bu o'z ichiga funksiya oluvchi funksiyalar.
Dekoratorlar haqida keyingi darslarimizning birida batafsil to'xtalamiz.
Do'stlaringiz bilan baham: |