Sobes.tech
Junior — Middle

Wyjaśnij różnice w używaniu pojedynczego i podwójnego podkreślenia w nazwach zmiennych i metod w Pythonie.

sobes.tech AI

Odpowiedź od AI

W Pythonie pojedynczy podkreślenie na początku nazwy zmiennej lub metody (np. _var) jest konwencją wskazującą, że ta nazwa jest przeznaczona do użytku wewnętrznego (chronione) i nie powinna być używana poza klasą lub modułem. To tylko zalecenie, interpreter nie zabrania dostępu.

Podwójne podkreślenie na początku nazwy (np. __var) uruchamia mechanizm name mangling — nazwa zmiennej lub metody jest zmieniana przez interpreter, aby utrudnić dostęp spoza klasy. Służy to do tworzenia prywatnych atrybutów, które są trudne do nadpisania lub przypadkowego użycia w podklasach.

Przykład:

class MyClass:
    def __init__(self):
        self._protected = 1  # konwencja: chroniony atrybut
        self.__private = 2   # name mangling

obj = MyClass()
print(obj._protected)    # dostęp możliwy, ale niezalecany
# print(obj.__private)   # spowoduje błąd AttributeError
print(obj._MyClass__private)  # dostęp do "prywatnego" atrybutu przez name mangling

Zatem pojedyncze podkreślenie to konwencja, a podwójne to mechanizm ukrywania nazw.