Sobes.tech
Middle
246

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" әдістері.
Интерпретатордың өңдеуі Интерпретатор ерекше өңдеуді орындамайды. Интерпретатор атрибуттар мен әдістердің атын __-мен басталатындар үшін манглинг жүргізеді (соңында __ жоқ).
Сыртқы қол жеткізу Тікелей қол жеткізу мүмкін. Атау манглингке байланысты қиын, _КлассАты__аты арқылы қол жеткізу керек.

Қысқаша айтқанда, екі сызықша астын сызу интерпретатордың атрибуттар мен әдістер үшін атау манглинг механизмін іске қосады, ал бір сызықша астын сызу атау бойынша келісім болып табылады, ол интерпретатордың мінез-құлқына әсер етпейді (интерактивті орта мен интернационализацияны қоспағанда).