Verwaltung von Objekten
Ampel-Objekte kopieren
Wir betrachten ein System aus zwei Ampeln, die im Gegentakt schalten sollen.
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?