Python inkapsulyatsiya


ULASHISH

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!