Czym jest name mangling w Pythonie?

W programowaniu obiektowym w Pythonie, hermetyzacja to koncepcja ukrywania stanu (czyli zmiennych) i zachowań (czyli metod) obiektu przed bezpośrednim dostępem z zewnątrz. Python, będący językiem o dynamicznej typizacji, oferuje mechanizm “name mangling” (przekształcanie nazw) dla nazw zaczynających się od podwójnego podkreślenia, aby uczynić je prywatnymi. Zrozumienie tego mechanizmu jest kluczowe dla programistów, którzy chcą kontrolować dostęp do pewnych elementów swoich klas.

Przykład użycia “name mangling”

Rozważmy prosty przykład klasy, która wykorzystuje mechanizm “name mangling” do ukrycia pewnych danych przed bezpośrednim dostępem z zewnątrz.

class SecretData:
    def __init__(self):
        self.public_data = "Publiczne informacje"
        self.__private_data = "Tajne informacje"

    def reveal_secret(self):
        # Metoda dostępu do prywatnych danych
        return self.__private_data

# Tworzenie instancji klasy
secret = SecretData()

# Dostęp do publicznych danych - jest możliwy
print(secret.public_data)  # Wyświetla: Publiczne informacje

# Próba dostępu do prywatnych danych - zakończy się niepowodzeniem
# print(secret.__private_data)  # Spowoduje błąd AttributeError

# Poprawny sposób dostępu do prywatnych danych
print(secret.reveal_secret())  # Wyświetla: Tajne informacje

W tym przykładzie zmienna __private_data jest prywatna dzięki zastosowaniu “name mangling”. Próba bezpośredniego dostępu do tej zmiennej z zewnątrz klasy (secret.__private_data) zakończy się wygenerowaniem wyjątku AttributeError. Aby uzyskać dostęp do prywatnych danych, konieczne jest użycie metody publicznej klasy, w tym przypadku reveal_secret.

Jak działa “name mangling”?

Mechanizm “name mangling” polega na automatycznym przekształceniu nazwy zmiennej przez interpreter Pythona. Nazwa zaczynająca się od dwóch podkreśleń (bez zakończenia dwoma podkreśleniami) jest przekształcana przez dodanie _NazwaKlasy na początku, co czyni ją trudniejszą do przypadkowego dostępu z zewnątrz klasy. Dla powyższego przykładu, __private_data staje się wewnętrznie _SecretData__private_data.

Podsumowanie

“Name mangling” w Pythonie to użyteczny mechanizm do wdrażania hermetyzacji poprzez ukrywanie wewnętrznych danych klasy przed zewnętrznym dostępem. Dzięki temu, programiści mogą lepiej kontrolować sposób, w jaki komponenty ich klas są dostępne dla reszty programu. Warto pamiętać, że “name mangling” jest stosowany automatycznie tylko do nazw zaczynających się od dwóch podkreśleń, co oznacza, że programiści muszą być świadomi tej konwencji podczas projektowania swoich klas.

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

Scroll to Top