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.
KLASSLARNI MODULGA AJRATISH
Vaqt o'tishi bilan dasturimizda klasslar ko'payib borishi tabiiy. Bizning asosiy
dasturimiz uzun va chigal bo'lmasligi uchun klasslarni ham huddi funksiyalar kabi
alohida modullarga ajratish maqsadga muvofiq bo'ladi. Dastur davomida kerak
bo'ladigan klasslarga esa modulni chaqirish (import) orqali murojat qilishimiz
mumkin. Bunda, bir-biriga bog'liq klasslarni bitta faylga joylashimiz mumkin.
Misol uchun, biz Talaba, Professor, Foydalanuvchi va Shaxs degan klasslarni bitta
odamlar.py moduliga, Avto, Bus, Train degan klasslarni esa boshqa transport.py
moduliga joyladik. Kelajakda biz bu klasslarga import orqali murjat qilishimiz
mumkin.
|