🥕 Atrybuty pseudoprywatne

Atrybuty, których nazwy zaczynają się od dwóch podkreślników, np. __nazwa. Taka konwencja nazw powoduje, że Python stosuje name mangling – czyli zmienia nazwę atrybutu w taki sposób, że jest trudniej dostępna z zewnątrz klasy, ale nie jest całkowicie prywatna. Jest to bardziej forma ochrony, niż pełne ukrycie atrybutów.

class MojaKlasa:
    def __init__(self):
        self.__ukryty_atrybut = "tajne"

    def pokaz_ukryty(self):
        return self.__ukryty_atrybut

obiekt = MojaKlasa()
print(obiekt.pokaz_ukryty())  # Poprawne: "tajne"
print(obiekt._MojaKlasa__ukryty_atrybut)  # Dostęp poprzez name mangling: "tajne"
Po co używać atrybutów pseudoprywatnych?
  • Ochrona przed przypadkowym nadpisaniem – przy dziedziczeniu klasy istnieje mniejsze ryzyko, że klasa pochodna przypadkowo nadpisze atrybut o tej samej nazwie.
  • Czytelność – pokazują, że atrybut nie jest przeznaczony do bezpośredniego użytku z zewnątrz klasy.