Python inkapsulyatsiya
Python inkapsulyatsiyasi
Inkapsulyatsiya - bu class ichidagi ma’lumotlarni himoya qilish.
Bu classda ma’lumotlar (xususiyatlar) va usullarni birga saqlashni anglatadi, shu bilan birga ma’lumotlarga sinfdan tashqaridan qanday kirish mumkinligini nazorat qiladi.
Bu sizning ma’lumotlaringizga tasodifiy o‘zgarishlarning oldini oladi va sinfingiz qanday ishlashining ichki tafsilotlarini yashiradi.
Xususiy xususiyatlar
Python-da siz ikkita pastki chiziq __ prefiksi yordamida xususiyatlarni shaxsiy qilishingiz mumkin:
Misol
__age nomli xususiy class xususiyatini yarating:
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age # Private property
p1 = Person("Emil", 25)
print(p1.name)
print(p1.__age) # This will cause an error
O‘zingiz sinab ko‘ring »
Eslatma: Xususiy xususiyatlarga sinfdan tashqaridan to‘g‘ridan-to‘g‘ri kirish mumkin emas.
Xususiy xususiyat qiymatini oling
Xususiy mulkka kirish uchun siz getter usulini yaratishingiz mumkin:
Misol
Xususiy mulkka kirish uchun getter usulidan foydalaning:
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
def get_age(self):
return self.__age
p1 = Person("Tobias", 25)
print(p1.get_age())
O‘zingiz sinab ko‘ring »
Xususiy xususiyat qiymatini belgilang
Xususiy xususiyatni o‘zgartirish uchun siz sozlash usulini yaratishingiz mumkin.
Sozlagich usuli ham qiymatni belgilashdan oldin uni tasdiqlashi mumkin:
Misol
Xususiy xususiyatni o‘zgartirish uchun setter usulidan foydalaning:
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
def get_age(self):
return self.__age
def set_age(self, age):
if age > 0:
self.__age = age
else:
print("Age must be positive")
p1 = Person("Tobias", 25)
print(p1.get_age())
p1.set_age(26)
print(p1.get_age())
O‘zingiz sinab ko‘ring »
Nega inkapsulyatsiyadan foydalaniladi?
Encapsulation provides several benefits:
- Ma’lumotlarni himoya qilish: ma’lumotlarning tasodifiy o‘zgarishini oldini oladi
- Tasdiqlash: Siz ma’lumotlarni sozlashdan oldin tekshirishingiz mumkin
- Moslashuvchanlik: ichki dastur tashqi kodga ta’sir qilmasdan o‘zgarishi mumkin
- Nazorat: Siz ma’lumotlarga qanday kirish va o‘zgartirishni to‘liq nazorat qilasiz
Misol
Ma’lumotlarni himoya qilish va tasdiqlash uchun inkapsulyatsiyadan foydalaning:
class Student:
def __init__(self, name):
self.name = name
self.__grade = 0
def set_grade(self, grade):
if 0 <= grade <= 100:
self.__grade = grade
else:
print("Grade must be between 0 and 100")
def get_grade(self):
return self.__grade
def get_status(self):
if self.__grade >= 60:
return "Passed"
else:
return "Failed"
student = Student("Emil")
student.set_grade(85)
print(student.get_grade())
print(student.get_status())
O‘zingiz sinab ko‘ring »
Himoyalangan xususiyatlar
Python shuningdek, bitta pastki chiziq _ prefiksi yordamida himoyalangan xususiyatlar uchun konventsiyaga ega:
Misol
Himoyalangan xususiyatni yarating:
class Person:
def __init__(self, name, salary):
self.name = name
self._salary = salary # Protected property
p1 = Person("Linus", 50000)
print(p1.name)
print(p1._salary) # Can access, but shouldn't
O‘zingiz sinab ko‘ring »
Eslatma: bitta pastki chiziq _ shunchaki konventsiyadir. Bu boshqa dasturchilarga xususiyat ichki foydalanish uchun mo‘ljallanganligini aytadi, ammo Python bu cheklovni qo‘llamaydi.
Shaxsiy usullar
Shuningdek, ikkita pastki chiziq prefiksi yordamida usullarni shaxsiy qilishingiz mumkin:
Misol
Shaxsiy usul yarating:
class Calculator:
def __init__(self):
self.result = 0
def __validate(self, num):
if not isinstance(num, (int, float)):
return False
return True
def add(self, num):
if self.__validate(num):
self.result += num
else:
print("Invalid number")
calc = Calculator()
calc.add(10)
calc.add(5)
print(calc.result)
# calc.__validate(5) # This would cause an error
O‘zingiz sinab ko‘ring »
Eslatma: Ikkita pastki chiziqli xususiy xususiyatlar singari, xususiy usullarni sinfdan tashqaridan to‘g‘ridan-to‘g‘ri chaqirib bo‘lmaydi.__validate usuli faqat class ichidagi boshqa usullar tomonidan ishlatilishi mumkin.
Ism Mangling
Nomlarni o‘zgartirish - bu Python shaxsiy xususiyatlar va usullarni qanday amalga oshirishi.
__ ikkita pastki chiziqdan foydalansangiz, Python avtomatik ravishda old tomonga _ClassName qo‘shish orqali uning nomini o‘zgartiradi.
Masalan,__age_Person__agega aylanadi.
Misol
Python ismni qanday o‘zgartirishini ko‘ring:
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age
p1 = Person("Emil", 30)
# This is how Python mangles the name:
print(p1._Person__age) # Not recommended!
O‘zingiz sinab ko‘ring »
Eslatma: Shaxsiy mulklarga o‘zgartirilgan nom yordamida kirishingiz mumkin bo‘lsa-da, bu tavsiya etilmaydi. Bu kapsülleme maqsadini yo‘q qiladi.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
