Czym jest name mangling w Pythonie?

W Pythonie mechanizm “name mangling” odnosi się do sposobu, w jaki interpreter Pythona zmienia nazwy zmiennych, które są oznaczone jako prywatne, przez dodanie do nich specjalnego prefiksu. Jest to ważny element języka, który pozwala na symulację prywatności w klasach, ograniczając dostęp do pewnych zmiennych czy metod z poziomu kodu poza klasą.

Przykład kodu z wyjaśnieniami

class SecretData:
    def __init__(self):
        # Zmienna oznaczona jako prywatna przez podwójny
        # podkreślnik na początku
        self.__privateVar = "Tajne"

    def reveal(self):
        # Metoda umożliwiająca dostęp do zmiennej prywatnej
        # wewnątrz klasy
        return self.__privateVar

# Tworzenie instancji klasy SecretData
secret = SecretData()

# Próba bezpośredniego dostępu do zmiennej prywatnej
# z poziomu kodu poza klasą zakończy się błędem
# print(secret.__privateVar)  # AttributeError

# Poprawny dostęp do zmiennej prywatnej za pomocą metody klasy
print(secret.reveal())  # Tajne

# Name mangling w praktyce - dostęp do zmiennej "prywatnej"
# przez zmodyfikowaną nazwę
print(secret._SecretData__privateVar)  # Tajne

Dlaczego stosuje się “name mangling”?

Mechanizm ten stosowany jest głównie do oznaczania zmiennych i metod jako prywatnych, co sugeruje, że nie powinny być one używane poza definicją klasy, w której się znajdują. Jednakże, w przeciwieństwie do innych języków programowania, w Pythonie prywatność jest tylko sugestią i może być obejściem dzięki wykorzystaniu “name mangling”.

Podsumowanie

“Name mangling” to technika używana w Pythonie do symulowania prywatnych zmiennych w klasach. Pomimo że Python nie posiada wbudowanych mechanizmów określających prywatność w sposób ścisły, “name mangling” pozwala na ograniczenie dostępu do pewnych elementów klasy, zachęcając programistów do korzystania z publicznych metod dostępu. To kolejny przykład elastyczności Pythona, który pozwala na implementację zaawansowanych koncepcji programistycznych w prosty i intuicyjny sposób.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Python od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top