Da die Klassendefinition in einer eigenen Datei liegt, hat das Hauptprogramm keine Kenntnis von ihr. Daher müssen wir die Klassendefinition im Hauptprogramm importieren.
from Smiley import Smiley
def setup():
pass
def draw():
pass
Die erste Zeile lässt sich so lesen: Aus der Datei Smiley.py
importiere die darin enthaltene Klasse Smiley
. Beachte, dass die Dateiendung nicht angegeben wird.
Nun haben wir Zugriff auf die Klasse und können ein erstes Objekt erstellen.
from Smiley import Smiley
smiley1 = Smiley()
def setup():
pass
def draw():
pass
In der neuen Zeile wird der Variablen smiley1
eine Instanz der Klasse Smiley
zugewiesen. Das heißt konkret, dass unsere Klassendefinition als Bauanleitung genommen wurde, um daraus ein konkretes Objekt zu erstellen. Weil das so einfach geht, lassen wir uns gleich noch einen zweiten Smiley bauen.
from Smiley import Smiley
smiley1 = Smiley()
smiley2 = Smiley()
def setup():
pass
def draw():
pass
Wichtig an dieser Stelle ist das Verständnis dafür, dass Python zwei völlig eigenständige Bereiche im Speicher für smiley1
und smiley2
verwaltet. Die einzige Gemeinsamkeit der beiden Objekte ist ihre Herkunft, die Klasse Smiley
.
Unser Smiley ist ja grundsätzlich mit einem minimalen Können ausgestattet: Er kann was sagen. Das können wir in unserem Code wie folgt abbilden:
In der Zeile
smiley1.say_something("Smiley1: Mir geht's blendend!")
rufen wir eine Methode des Objekts smiley1
auf und übergeben ein Argument. Python sucht dann nach der Klasse, aus der das Objekt entstanden ist und darin nach der Methode. Schauen wir uns nochmal den entsprechenden Abschnitt in der Klassendefinition an,
class Smiley:
def say_something(self, something):
print(something)
fällt unser Blick erneut auf das Schlüsselwort self
. Es ist dafür zuständig, dass beim Aufruf der Methode nicht das Klassenobjekt, sondern das Instanzobjekt angesprochen wird. self
bezieht sich also immer auf ein konkretes Objekt, auf eine Instanz der Klasse, nicht auf die Klasse als Bauplan. Dadurch ist es möglich, unterschiedliche Parameter wie in unserem Beispiel zu übergeben und die Smiley individuelle Aussagen machen zu lassen.