i

Exkurs - Implementierung in Python

Deklaration einer Klasse

Am Beispiel der Klasse Roboter sollen die Besonderheiten aufgezeigt werden, die man bei der Implementierung von Klassen in Python beachten muss.

Ausgangspunkt ist das folgende Klassendiagramm, das die Struktur der Klasse Roboter beschreibt.

Klassendiagramm

Eine Implementierung in Python könnte wie folgt aussehen (beachte, dass auch andere Implementierungen möglich sind):

class Roboter(object):
    def __init__(self):
        self.x = 0
        self.y = 0
        self.r = 'S'

    def schritt(self):
        if self.r == 'O':
            self.x = self.x + 1
        elif self.r == 'S':
            self.y = self.y + 1
        elif self.r == 'W':
            self.x = self.x - 1
        elif self.r == 'N':
            self.y = self.y - 1

    def rechts(self):
        if self.r == 'O':
            self.r = 'S'
        elif self.r == 'S':
            self.r = 'W'
        elif self.r == 'W':
            self.r = 'N'
        elif self.r == 'N':
            self.r = 'O'

    def links(self):
        if self.r == 'O':
            self.r = 'N'
        elif self.r == 'N':
            self.r = 'W'
        elif self.r == 'W':
            self.r = 'S'
        elif self.r == 'S':
            self.r = 'O'

Eine Klassendeklaration wird immer mit dem Schlüsselwort class eingeleitet. Es folgt der Klassenname und in Klammern die Oberklasse, von der die neue Klasse abgeleitet wird. Mehr hierzu wird im Abschnitt Vererbung erläutert. Im vorliegenden Fall ist die Oberklasse die vom Python-System vorgegebene Klasse object, die man immer dann verwenden sollte, wenn keine speziellen Oberklassen vorgesehen sind.

Der Konstruktor (einer jeden Klasse) wird in Python mit __init__ bezeichnet (beachte: zwei Unterstrichen vor und nach dem Wort init).

Die Konstruktormethode verwendet - wie auch alle anderen Methoden - einen ersten Parameter self. Dieser Parameter wird bei der Ausführung der Methode durch das betreffende Objekt aktualisiert. Dieser Parameter darf nicht fehlen, da mit ihm in Python eine Prozedur- bzw. Funktionsdeklaration erst zu einer Methodendeklaration innerhalb einer Klasse wird. Man darf den Parameter aber anders benennen. Wir verzichten darauf und benutzen die übliche Konvention, ihn mit self zu bezeichnen.

Bei der Implementierung der Konstruktormethode sollten alle Attribute eingeführt und mit Anfangswerten versehen werden. Hierdurch verschafft man sich einen Überblick über sämtliche Attribute der Klasse.

Attribute werden in Python in der Form self.attributname dargestellt, wobei hier der erste Parameter der Methodendeklaration (hier also self) dem Attributnamen vorangestellt wird.

Beachte, dass jede Methode einen ersten Parameter self hat (s. o.).

Erzeugung von Objekten

Zur Erzeugung eines Objekts muss die Konstruktormethode der zugehörigen Klasse aufgerufen werden. In Python erreicht man dies, indem man den Klassennamen wie im folgenden Protokoll aufruft.

>>> rob = Roboter()
>>> rob.x
0
>>> rob.y
0
>>> rob.r
'S'
>>> rob.__dict__
{'x': 0, 'y': 0, 'r': 'S'}

Inspektion von Objekten

Das Protokoll zeigt auch, wie man sich in Python direkt einen Überblick über sämtliche Attribute und Attributwerte eines Objekts verschafft. Mit einem Aufruf der Gestalt objekt.__dict__ erhält man den aktuellen Objektzustand.

Vernichtung von Objekten

Der Python-Dialog unten zeigt, wie man ein Objekt gezielt vernichten kann und somit eine Destruktormethode aktivieren kann. Python übernimmt das Vernichten von Objekten selbst, so dass wir uns in der Regel darum nicht kümmern müssen.

>>> rob = Roboter()
>>> rob.x
0
>>> del rob
>>> rob.x
Traceback (most recent call last):
  File ...
NameError: name 'rob' is not defined
>>> 

Suche

v
7.2.4.1.4
inf-schule.de/oop/python/roboter/objekteklassen/exkurs_klassepython
inf-schule.de/7.2.4.1.4
inf-schule.de/@/page/cE3ttrRJwueThWiA

Rückmeldung geben