Verwaltung von Objekten

Ampel-Objekte kopieren

Wir betrachten ein System aus zwei Ampeln, die im Gegentakt schalten sollen.

Ampelsystem

Als Baustein zur Simulation eines solchen Ampelsystems soll eine Implementierung der Klasse Ampel gegeben sein.

class Ampel(object):
    def __init__(self, anfangszustand):
        self.zustand = anfangszustand

    def setZustand(self, z):
        self.zustand = z

    def getZustand(self):
        return self.zustand

    def schalten(self):
        if self.zustand == 'rot':
            self.zustand = 'rotgelb'
        elif self.zustand == 'rotgelb':
            self.zustand = 'gruen'
        elif self.zustand == 'gruen':
            self.zustand = 'gelb'
        elif self.zustand == 'gelb':
            self.zustand = 'rot'

    def getLampen(self):
        if self.zustand == 'rot':
            lampen = (True, False, False)
        elif self.zustand == 'rotgelb':
            lampen = (True, True, False)
        elif self.zustand == 'gruen':
            lampen = (False, False, True)
        elif self.zustand == 'gelb':
            lampen = (False, True, False)
        return lampen

Ziel der folgenden Betrachtungen ist es, die Verwaltung von Ampel-Objekten mit Hilfe von Variablen genauer zu untersuchen.

Aufgabe 1

Wir betrachten hier das Kopieren von Ampel-Objekten.

(a) Stelle Vermutungen auf, was anstelle der Fragezeichen jeweils steht. Teste, ob deine Vermutungen stimmen.

>>> a1 = Ampel('rot')
>>> a2 = a1
>>> a1.getZustand()
?
>>> a2.getZustand()
?
>>> a2.setZustand('gruen')
>>> a2.getZustand()
?
>>> a1.getZustand()
?

(b) Kannst du dir die Ergebnisse erklären?

(c) Wie muss man vorgehen, wenn man unabhängig voneinander arbeitende Ampeln simulieren möchte?

Objekte und ihre Identität

Die folgenden Experimente dienen dazu, das (manchmal merkwürdige) Verhalten von Objekten zu verstehen.

Aufgabe 2

(a) Mit dem id-Operator kann man sich die sogenannte Identitätsnummer eines Objekts anzeigen lassen.

>>> a1 = Ampel('rot')
>>> a1
<__main__.Ampel object at 0x0135EDB0>
>>> id(a1)
20311472
>>> hex(20311472)
'0x135edb0'
>>> a2 = Ampel('rot')
>>> id(a2)
20312048

Was verbirgt sich wohl hinter dieser Identitätsnummer?

(b) Prüfe mit geeigneten Python-Dialogen, ob sich die Identitätsnummer eines Objekts ändert, wenn sich der Zustand eines Objekts beim Ausführen einer Methode ändert.

(c) Führe den folgenden Python-Dialog aus.

>>> a1 = Ampel('rot')
>>> id(a1)
?
>>> a2 = a1
>>> id(a2)
?

Kannst du dir jetzt die Ergebnisse aus Aufgabe 1 erklären?

X

Fehler melden

X

Suche