Уроки програмного забезпечення | Hamuv
Підручники з програмного забезпечення => Python => Тема розпочата: Hamuv від Квт. 07, 2025, 02:05 PM
Python програмалаш тилида інкапсуляція (encapsulation) объектга йўналтирилган програмалаш (ООП) нинг муҳим принципларидан биридир. У маълумотлар ва улар билан ишлайдиган усулларни бир жойга жамлаш, шунингдек, уларга ташқи муҳитдан ноўрин киришни чеклаш имконини беради. Ушбу мақолада Python-да інкапсуляціянинг асослари, уни амалга ошириш усуллари ва амалий код намуналарини кўриб чиқамиз. SEO учун оптималлаштирилган ва фойдаланувчилар учун қулай мазмун тайёрлашга эътибор берамиз.
Інкапсуляція деган нима?Інкапсуляція — бу класс ичидаги маълумотлар (хусусиятлар) ва усулларни бирлаштириш, шу билан бирга уларни ташқи дунёдан "ҳимоя қилиш" жараёни. Python-да інкапсуляція маълумотларнинг хавфсизлигини таъминлаш ва коднинг модуллигини ошириш учун қўлланади. У икки асосий мақсадга хизмат қилади:- Маълумотларни яшириш: Класс хусусиятларига тўғридан-тўғри киришни чеклаш.
- Интерфейсни соддалаштириш: Фойдаланувчига фақат керакли функцияларни очиқ қилиш.
Python-да Інкапсуляціяни Амалга ОширишPython-да інкапсуляція тўлиқ мажбурий эмас, чунки тилда қатъий "private" ёки "protected" калит сўзлари йўқ. Лекин ушбу концепцияни амалга ошириш учун махсус конвенциялар ва усуллар мавжуд:- Бир доира (_) билан бошланадиган хусусиятлар: Бу "protected" деб ҳисобланади (конвенция сифатида).
- Икки доира (__) билан бошланадиган хусусиятлар: Бу "private" деб қабул қилинади (Python уни ном манглинг орқали яширади).
Код Намунаси: Оддий ІнкапсуляціяҚуйидаги мисолда Python-да інкапсуляциянинг асосий усуллари кўрсатилган:class Person:
def __init__(self, ism, yosh):
self.ism = ism # Очиқ хусусият
self._yosh = yosh # "Protected" хусусият
self.__maosh = 5000 # "Private" хусусият
def get_maosh(self): # Private хусусиятга кириш учун метод
return self.__maosh
def set_maosh(self, yangi_maosh): # Private хусусиятни ўзгартириш
if yangi_maosh > 0:
self.__maosh = yangi_maosh
# Тест қилиш
shaxs = Person("Олексій", 25)
print(shaxs.ism) # Натижа: Олексій
print(shaxs._yosh) # Натижа: 25 (лекин бу тавсия этилмайди)
# print(shaxs.__maosh) # Хатолик: AttributeError
print(shaxs.get_maosh()) # Натижа: 5000
shaxs.set_maosh(6000)
print(shaxs.get_maosh()) # Натижа: 6000
Бу мисолда:- ism — очиқ хусусият.
- _yosh — "protected" хусусият, лекин унга тўғридан-тўғри кириш мумкин.
- __maosh — "private" хусусият, унга фақат get_maosh ва set_maosh усуллари орқали мурожаат қилиш мумкин.
Getter ва Setter Усуллари билан ИнкапсуляціяPython-да маълумотларни янада яхши назорат қилиш учун @property декораторидан фойдаланилади. Бу getter ва setter усулларини энг қулай усулда яратиш имконини беради.class Student:
def __init__(self, ism):
self.__ism = ism
@property
def ism(self):
return self.__ism
@ism.setter
def ism(self, yangi_ism):
if isinstance(yangi_ism, str) and len(yangi_ism) > 0:
self.__ism = yangi_ism
else:
print("Хато: Исм тўғри бўлиши керак!")
# Тест қилиш
talaba = Student("Марія")
print(talaba.ism) # Натижа: Марія
talaba.ism = "Анна" # Setter ишлайди
print(talaba.ism) # Натижа: Анна
talaba.ism = "" # Натижа: Хато: Исм тўғри бўлиши керак!
Бу мисолда __ism хусусияти @property ёрдамида бошқарилади, ва фойдаланувчи уни оддий хусусиятдек ишлатади.
Python-да Інкапсуляциянинг Афзалликлари ва ЧекловлариАфзалликлар:- Маълумотларни хавфсиз сақлаш имконияти.
- Коднинг модуллиги ва ўқилиши осонлиги.
- Ташқи муҳитдан ноўрин ўзгартиришларнинг олдини олиш.
Чекловлар:- Python-да інкапсуляція тўлиқ қатъий эмас (масалан, __maosh га _Person__maosh орқали кириш мумкин).
- Конвенцияларга кўпроқ таянади, қатъий мажбурият йўқ.
ХулосаPython-да інкапсуляція маълумотларни яшириш ва кодни тузилган ҳолда сақлаш учун муҳим воситадир. _ ва __ префикслари, шунингдек @property декоратори ёрдамида сиз хавфсиз ва самарали класслар яратишингиз мумкин. Юқоридаги намуналарни синаб кўринг ва ўз лойиҳаларингизда қўлланг!