Python-да бір сызықша мен екі сызықша арасындағы айырмашылық неде?
AI-дан жауап
sobes.tech AI
Python-да бір сызықша астын сызу (_) бірнеше қолдануға ие:
- Әдетте, сыныптың "ішкі" немесе "жеке" атрибуттары мен әдістерін белгілеу үшін пайдаланылады. Бұл келісім әзірлеушілер үшін, интерпретатор үшін қатаң ереже емес.
- Python интерпретаторының интерактивті сессиясында соңғы орындалған өрнектің нәтижесін сақтау үшін пайдаланылады.
forциклінде немесе тағайындауда, мәні пайдаланылмайтын айнымалыны көрсету үшін пайдаланылады.- Интернационализацияда (
gettext) пайдаланылады.
Python-да екі сызықша астын сызу (__) келесі үшін пайдаланылады:
-
Атау манглинг: сыныптың "жарты-жеке" атрибуттары мен әдістерін жасау үшін пайдаланылады. Python интерпретаторы мұндай атрибуттың атын өзгертіп, оның басына
_КлассАтықосады, бұл оны сыныптан тыс қол жеткізуді қиындатады.class MyClass: def __init__(self): self.__private_var = 10 def public_method(self): print(self.__private_var) obj = MyClass() # Тікелей қол жеткізу AttributeError-ға әкеледі # print(obj.__private_var) # Манглинг арқылы қол жеткізу print(obj._MyClass__private_var) -
"Dunder" әдістері (Magic methods): екі сызықша астын сызумен басталып, сонымен аяқталатын арнайы әдістер (мысалы,
__init__,__str__,__add__), олар белгілі бір операциялар орындалғанда шақырылады (объекті инициализациясы, жолға айналдыру, қосу және т.б.).
Салыстыру:
| Белгісі | Бір сызықша астын сызу (_) |
Екі сызықша астын сызу (__) |
|---|---|---|
| Мақсаты | Ішкі элементтерді белгілеу үшін келісім; уақытша сақтау; айнымалыны елемеу; интернационализация. | Атау манглинг ("жарты-жеке" элементтер үшін); "dunder" әдістері. |
| Интерпретатордың өңдеуі | Интерпретатор ерекше өңдеуді орындамайды. | Интерпретатор атрибуттар мен әдістердің атын __-мен басталатындар үшін манглинг жүргізеді (соңында __ жоқ). |
| Сыртқы қол жеткізу | Тікелей қол жеткізу мүмкін. | Атау манглингке байланысты қиын, _КлассАты__аты арқылы қол жеткізу керек. |
Қысқаша айтқанда, екі сызықша астын сызу интерпретатордың атрибуттар мен әдістер үшін атау манглинг механизмін іске қосады, ал бір сызықша астын сызу атау бойынша келісім болып табылады, ол интерпретатордың мінез-құлқына әсер етпейді (интерактивті орта мен интернационализацияны қоспағанда).