Assalomu alaykum, yosh dasturchilar! 😊
Bugun biz Encapsulation tushunchasini o'rganamiz
Encapsulation — bu sinf ichidagi atributlar va metodlarni bir butun sifatida birlashtirish va ularga kirishni cheklash orqali ma'lumotlarni himoya qilish.
class Shaxs:
def __init__(self, ism):
self.ism = ism # Public atribut
shaxs = Shaxs("Ali")
print(shaxs.ism) # Ali
shaxs.ism = "Vali" # Tashqaridan o'zgartirish mumkin
print(shaxs.ism) # Vali
Hamma joydan foydalanish mumkin (masalan, self.ism)
Faqat sinf va uning voris sinflari ichida ishlatiladi (masalan, self._ism)
Faqat sinf ichida ishlatiladi (masalan, self.__ism)
Public atributlar - hamma joydan foydalanish mumkin:
class Talaba:
def __init__(self, ism, yosh):
self.ism = ism # Public atribut
self.yosh = yosh # Public atribut
def malumot(self):
return f"Ism: {self.ism}, Yosh: {self.yosh}"
# Test qilish
talaba = Talaba("Ali", 20)
print(talaba.ism) # Ali
print(talaba.yosh) # 20
print(talaba.malumot()) # Ism: Ali, Yosh: 20
# Tashqaridan o'zgartirish mumkin
talaba.ism = "Vali"
talaba.yosh = 21
print(talaba.malumot()) # Ism: Vali, Yosh: 21
Protected atributlar - faqat sinf va uning voris sinflari ichida ishlatiladi:
class Shaxs:
def __init__(self, ism, yosh):
self.ism = ism # Public atribut
self._yosh = yosh # Protected atribut (bitta underscore)
def yoshni_korsat(self):
return f"Yosh: {self._yosh}"
class Talaba(Shaxs):
def __init__(self, ism, yosh, kurs):
super().__init__(ism, yosh)
self.kurs = kurs
def toliq_malumot(self):
return f"Ism: {self.ism}, Yosh: {self._yosh}, Kurs: {self.kurs}"
# Test qilish
talaba = Talaba("Zilola", 19, 2)
print(talaba.ism) # Zilola
print(talaba._yosh) # 19 (ishlaydi, lekin tavsiya qilinmaydi)
print(talaba.toliq_malumot()) # Ism: Zilola, Yosh: 19, Kurs: 2
Private atributlar - faqat sinf ichida ishlatiladi:
class Bank_Hisob:
def __init__(self, ism, boshlangich_summa):
self.ism = ism # Public
self.__summa = boshlangich_summa # Private (ikki underscore)
def summani_korsat(self):
return f"Hisob: {self.__summa} so'm"
def pul_qoshish(self, miqdor):
if miqdor > 0:
self.__summa += miqdor
return f"{miqdor} so'm qo'shildi. Yangi hisob: {self.__summa} so'm"
else:
return "Noto'g'ri miqdor!"
def pul_olish(self, miqdor):
if 0 < miqdor <= self.__summa:
self.__summa -= miqdor
return f"{miqdor} so'm olindi. Qolgan hisob: {self.__summa} so'm"
else:
return "Yetarli mablag' yo'q!"
# Test qilish
hisob = Bank_Hisob("Ali", 100000)
print(hisob.ism) # Ali
print(hisob.summani_korsat()) # Hisob: 100000 so'm
print(hisob.pul_qoshish(50000)) # 50000 so'm qo'shildi. Yangi hisob: 150000 so'm
print(hisob.pul_olish(30000)) # 30000 so'm olindi. Qolgan hisob: 120000 so'm
# Private atributga to'g'ridan-to'g'ri kirish mumkin emas
# print(hisob.__summa) # Xatolik!
Private atributlarga xavfsiz kirish uchun getter va setter metodlari:
class Talaba:
def __init__(self, ism, yosh):
self.ism = ism
self.__yosh = yosh # Private atribut
# Getter metodi
def get_yosh(self):
return self.__yosh
# Setter metodi
def set_yosh(self, yangi_yosh):
if 0 < yangi_yosh < 100:
self.__yosh = yangi_yosh
return f"Yosh o'zgartirildi: {self.__yosh}"
else:
return "Noto'g'ri yosh!"
def malumot(self):
return f"Ism: {self.ism}, Yosh: {self.__yosh}"
# Test qilish
talaba = Talaba("Sardor", 18)
print(talaba.get_yosh()) # 18
print(talaba.set_yosh(19)) # Yosh o'zgartirildi: 19
print(talaba.set_yosh(-5)) # Noto'g'ri yosh!
print(talaba.malumot()) # Ism: Sardor, Yosh: 19
Vazifa: Bank hisobi sinfini yarating
ism - public atribut__summa - private atributget_summa() - getter metodiset_summa() - setter metodi (faqat musbat qiymatlar)pul_qoshish() va pul_olish() metodlariVaqt: 10 daqiqa ⏰
Vazifa: Mashina sinfini yarating
model - public atribut__tezlik - private atribut_rang - protected atributVaqt: 10 daqiqa ⏰
ism - public atribut__baho - private atribut (0-100 orasida)manzil - public atribut__narx - private atribut_maydon - protected atributmodel - public atribut__battery - private atribut (0-100%)Hamma joydan foydalanish mumkin
Faqat sinf va voris sinflar ichida
Faqat sinf ichida ishlatiladi
Xavfsiz kirish metodlari
Keyingi dars: Property dekoratori mavzusini o'rganamiz
Savollaringiz bo'lsa, yozib qoldiring! 😊