Sobes.tech
Junior — Middle

Тафсир диҳед фарқият дар истифодаи як ва ду хати зер дар номҳои тағирот ва усулҳо дар Python.

sobes.tech AI

Ҷавоб аз AI

Дар Python, ягонинг номининг бошидаги бир ёлғон чизиқ (_var) — бу ички ишлатиш учун (химояланган) номланишни кўрсатадиган анъана бўлиб, синф ёки модулдан ташқарида ишлатилиши керак эмас. Бу фақат тавсия, интерпретаторга кириш тақиқланмаган.

Икки ёлғон чизиқ (__var) номнинг бошида name mangling механизмини фаоллаштиради — интерпретатор томонидан ўзгартирилади, синфдан ташқарига киришни қийинлаштириш учун. Бу хусусий атрибутлар яратиш учун қўлланилади, уларни қайта ёзиш ёки случайно қўллаш қийин бўлади.

Масалан:

class MyClass:
    def __init__(self):
        self._protected = 1  # анъана: ҳимояланган атрибут
        self.__private = 2   # name mangling

obj = MyClass()
print(obj._protected)    # кириш мумкин, аммо тавсия этилмайди
# print(obj.__private)   # AttributeError хато келтиради
print(obj._MyClass__private)  # name mangling орқали "махфий" атрибутга кириш

Шунинг учун, бир ёлғон чизиқ — анъана, иккита — номни яшириш механизми.