Unsere Klasse Kunde hat einen schwerwiegenden Nachteil:

class Kunde:                   # Klassendefinition beginnt mit class Klassenname:
    def __init__(self, name):  # Konstruktor = spezielle Methode, die beim Erzeugen eines Objekts aufgerufen wird
        self.name = name       # Eigenschaft name wird initialisiert
    
k1 = Kunde("Meier")            # Objekt k1 wird erzeugt (dabei wird der Konstruktor aufgerufen)

Ein direkter Zugriff auf die Eigenschaft name ist möglich:
          
print(k1.name)                 # direkter Zugriff auf die Eigenschaft name

Gegen das Prinzip der Datenkapselung wird verstoßen!


Um das zu korregieren müssen wir dafür sorgen, dass die Eigenschaften eines Objektes privat sind:

class Kunde:                   # Klassendefinition beginnt mit class Klassenname:
    def __init__(self, name):  # Konstruktor initialisiert Eigenschaft bei der Erzeugung des Objekts
        self.__name = name     # Eigenschaft name ist privat "__"

    def getName(self):         # Methode hat Zugriff auf die private Eigenschaft
        return self.__name

    
k1 = Kunde("Meier")            # Objekt k1 wird erzeugt (dabei wird der Konstruktor aufgerufen)

Jetzt muss kann nur noch eine Methode des gleichen Objekts auf die Eigenschaft zugreifen:

print(k1.name)                 # direkter Zugriff auf Eigenschaft NICHT möglich

print(k1.getName())            # Zugriff über die Methode ist möglich

Last modified: Tuesday, 10 February 2015, 11:22 AM