Keep your place in this quest

Log in or sign up for free to subscribe, follow lesson progress, and access more learning content.

In der objektorientierten Programmierung sind nicht alle Daten und Methoden dafür gedacht, direkt von außerhalb der Klasse zuzugreifen. Manchmal möchte man interne Details verbergen, sodass sie nur innerhalb der Klasse selbst verwendet werden können.

In Python kann man signalisieren, dass ein Attribut oder eine Methode privat ist, indem man ihren Namen mit zwei Unterstrichen (__) beginnt.

Dies macht den Zugriff zwar nicht unmöglich, aktiviert jedoch eine Funktion namens Name Mangling, durch die der Attributname intern geändert wird, sodass er von außen schwerer zugänglich ist.


Warum private Mitglieder verwenden?

Private Attribute und Methoden:

  • Helfen, Daten zu schützen, damit sie nicht versehentlich verändert werden.
  • Machen deutlich, welche Teile der Klasse intern sind und von außen nicht verwendet werden sollten.
  • Ermöglichen, die interne Implementierung zu ändern, ohne anderen Code, der die Klasse nutzt, zu brechen.

WICHTIG: Privatsphäre in Python beruht auf Konvention, nicht auf Zwang. Private Mitglieder können immer noch erreicht werden, wenn man es wirklich versucht, aber die Absicht ist, dass man das nicht tut.


Beispiel: Eine Person-Klasse

class Person:
    def __init__(self, name, age):
        self.name = name          # Öffentliches Attribut
        self.__age = age          # Privates Attribut

    def print_name(self):
        print("Name:", self.name)

    def print_info(self):
        self.print_name()
        self.__print_age()        # Aufruf einer privaten Methode innerhalb der Klasse

    def __print_age(self):        # Private Methode
        print("Alter:", self.__age)

p = Person("John", 30)

p.print_name()        # Funktioniert: Name: John
p.print_info()        # Funktioniert: Name: John  Alter: 30

Was passiert, wenn man versucht, auf ein privates Attribut zuzugreifen?

Versucht man, von außerhalb der Klasse direkt auf ein privates Mitglied zuzugreifen, erhält man einen AttributeError:

p = Person("John", 30)
print(p.__age)  # ❌ Das verursacht einen Fehler

Warum? Weil Python intern den Namen __age in _Person__age ändert (Name Mangling). Das verhindert versehentlichen Zugriff oder Konflikte mit Unterklassen.


Zugriff auf private Daten (wenn wirklich nötig)

Technisch ist es möglich, private Mitglieder über ihren gemanglten Namen zu erreichen:

print(p._Person__age)  # 30

Dies widerspricht jedoch dem Gedanken der Privatsphäre – solche Zugriffe sollten nur in seltenen Debugging-Situationen erfolgen, nicht im normalen Programmablauf.


Private Methoden

Wie bei Attributen können auch Methoden mit doppelten Unterstrichen privat gemacht werden. In unserem Beispiel ist __print_age() privat – ein Aufruf von außerhalb der Klasse ist nicht möglich:

p.__print_age()  # ❌ Das verursacht einen Fehler

Innerhalb der Klasse funktioniert der Aufruf, wie in print_info() gezeigt.

Wann private Mitglieder verwenden

Private Attribute und Methoden sollten genutzt werden, wenn:

  • Du versehentlichen Missbrauch interner Teile deiner Klasse verhindern möchtest.
  • Du kontrollieren möchtest, wie auf Daten zugegriffen oder sie geändert werden (oft gemeinsam mit Getter- und Setter-Methoden).
  • Du eine klare Trennung zwischen der öffentlichen API der Klasse (für außen gedachte Elemente) und ihren Implementierungsdetails schaffen willst.

Zusammenfassung

Private Mitglieder in Python:

  • Haben Namen mit __ (doppelter Unterstrich).
  • Sind nur für die interne Verwendung gedacht.
  • Sind technisch über Name Mangling zugänglich, deren Privatsphäre sollte aber respektiert werden.

Sie sind ein Signal an andere Programmierer (und an dich selbst in der Zukunft!), was sicher genutzt werden kann und was interne Details sind, die du später ohne Warnung ändern kannst.