Exkurs: Funktionen & Methoden#

Weiter unten möchte ich euch gleich noch ein paar wichtige Funktionen von Listen zeigen. Dazu müssen wir jedoch noch kurz eine besondere Form von Funktionen kennenlernen: die sogenannten Methoden.

In Python kann man ganz allgemein zwischen zwei Formen von Funktionen unterscheiden. Auf der einen Seite gibt es das, was man ganz offiziell Funktion nennt. Eine solche Funktion ist beispielsweise die Funktion print() oder auch die Funktion len(). Diese Funktionen sind als komplett eigenständige Objekte anzusehen. Sie sind Anweisungen für unser Programm, welche ihr Dasein als Objekte fristen. Funktionen sind in Objekte gegossene, objektgewordene Handlungen unseres Programmes, welche immer und immer wieder aufgerufen werden können.

Ein besonderer Nutzen von Funktionen (und Methoden) ist, dass ihre Prozeuren so allgemein gehalten sind, dass wir ihre Handlungen auf verschiedene andere Objekte anwenden können d.h. verschiedene Objekte mithilfe von Funktionen verarbeiten können. Sollen gewisse Objekte mithilfe von Funktionen verarbeitet werden, dann müssen diese in die runden Klammern der Funktion stecken. Die Funktion, als eigenständiges Objekt, tritt dann quasi von außen an das eingegebene Objekt heran, verschluckt es, verarbeitet es nach den Regeln der Funktion und gibt eine verarbeitete Version des eingegebenen Objektes wieder aus. Stecken wir Objekte in eine Funktion, dann sieht das ganz allgemein so aus:

FUNKTION(INPUTOBJEKT, INPUTOBJEKT, ...)

Auf der anderen Seite gibt es sogenannte Methoden. Methoden sind eigentlich fast nichts anderes als Funktionen. Der kleine Unterschied ist nur, dass eine Methode nicht eigenständig existiert. Eine Methode ist kein eigenständiges Objekt, sondern ist immer an ein bestimmtes Objekt gebunden. Eine Methode ist eine Funktion, die eine Eigenschaft eines Objektes ist. Eine Methode kann daher immer nur von diesem Objekt, dessen Eigenschaft die Methode ist, aufgerufen werden. Methoden sind als Eigenschaften von Objekten komplett auf ihr Objekt zugeschnitten, können meist unmittelbar auf das Innenleben von Objekten zugreifen und dieses direkt verändern.

Methoden kann man wie Funktionen als Handlungen verstehen. Da eine Methode aber eine Eigenschaft eines Objektes ist, kann man sich vorstellen, dass nun das Objekt über die Fähigkeit zu handeln verfügt. Und die Handlung ist eben die Methode. Während also eine Funktion quasi wie eine Handlung an für sich ist, ist eine Methode eine Handlung, die von einem ganz bestimmten Objekt ausgeführt wird. Je nach Objekt-Typ kann das Objekt dann verschiedene Methoden, also verschiedene Handlungen, ausführen.

Im Gegensatz zu klassischen Funktionen sind Methoden also nicht komplett eigenständig und können im Code auch nicht “frei herumstehen” z.B. wenn sie aufgerufen werden. Methoden werden stattdessen aufgerufen, indem deren Name hinten an ein Objekt mit einem Punkt angehängt werden. Das sieht dann allgemein formuliert so aus:

OBJEKT.METHODE()

Wird diese Methode auf diese Weise aufgerufen, bezieht sich die Methode unmittelbar auf das Objekt, von der aus die Methode aufgerufen wurde. Dadurch muss das Objekt selbst nicht mehr als Argument in die Methode eingegeben werden, weil dies quasi schon automatisch passiert ist. Neben dem Objekt, auf das sich die Methode bezieht, können natürlich noch weitere Objekte als Input eingegeben werden. Diese werden dann wie bei normalen Funktionen in die runden Klammern der Methode geschrieben:

OBJEKT.METHODE(INPUTOBJEKT, INPUTOBJEKT, ...)

Nochmal: Sowohl Funktionen und Methoden sind Programmanweisungen d.h. Code, der angibt, wie unser Programm handeln soll. Der Unterschied ist nur, dass Funktionen Handlungen sind, die (unrealistischerweise) eigentändig existieren können. Dieses selbstständige Handeln kann an als fremde, anonyme Macht an andere Objekte herantreten und diese nach den Regeln der Funktion verarbeiten. Das verarbeitete Objekt bleibt dabei passiv. Handeln tut die Funktion. Methoden hingegen sind die aktive Seite eines Objektes. Verfügt ein Objekt über Methoden, so ist dieses nicht mehr rein passiv, sondern kann selbst aktiv handeln.

Übertragen auf die Realität könnte man die Fähigkeit von Hunden zu bellen und zu springen als Methoden von Hunden beschreiben. Springt ein Hund, dann führt der Hund quasi den Code hund.springen() aus. Bellt ein Hund, dann führt der Hund praktisch den Code hund.bellen() aus. Würden in der Realität das Springen und das Bellen an sich existieren, ohne eine Eigenschaft von Hunden oder anderen Objekten zu sein, dann würde das in Python einer Funktion entsprechen. Ein Hund würde dann z.B. bellen, wenn die Funktion bellen() den Hund zum bellen bewegt, indem folgender Code ausgeführt wird: bellen(hund). Ich gehe davon aus, dass das nicht deinem Verständnis von der Realität entspricht. Methoden sind also um einiges näher “an der Realität” als Funktionen.

Später werden wir daher unsere Agenten auch als eigene Objekte mit gewissen Methoden definieren. Handelt ein Agent, dann sieht das allgemein so aus:

AGENT.HANDELN()

Wenn der Agent mit einem anderen Agenten interagiert, könnte das ganze dann so aussehen:

AGENT.HANDELN(ANDERER_AGENT)

Aber wie gesagt, eine solche Logik werden wir erst später kennenlernen. Zu Beginn verwenden wir stattdessen eine solche, eher realitätsfernere Logik: Wir haben eine allgemeine Funktion HANDELN() und einen AGENT. Wenn wir diesen Agenten nun handeln lassen wollen, dann wenden wir die Funktion entsprechend auf den Agenten an:

HANDELN(AGENT)

Für eine Interaktion könnte man dann z.B. den zweiten Agenten auch als Argument in die Funktion einfügen:

HANDELN(AGENT, ANDERER_AGENT)

Hier ist also die Funktion HANDELN() nicht eine Eigenschaft eines Agenten, sondern verarbeitet nur die Daten des Agenten auf bestimmte Weise. In der Realität handeln ja aber die Agenten selbst und werden nicht von außen durch eine anonyme Macht “gehandelt”. Die objektgebundenen Methoden der objektorientierten Programmierung, bei denen der Agent praktisch selbst handelt, sind also viel “natürlicher” bzw. realistischer. Dies hilft uns u.a. auch bei der Übersetzung der Realität bzw. einer soziologischen Theorie in ein Computerprogramm, weil das viel eher unserem Denken entspricht. Technisch gesehen, ist es eigentlich egal, ob wir Funktionen oder Methoden benutzen. Wir können mit beiden mehr oder weniger das gleiche machen. Es geht dabei tatsächlich nur darum, wie wir unser Programm ausformulieren, wie wir unsere Gedanken dem Computer mitteilen wollen.

Das ist alles noch etwas abstrakt und es ist an dieser Stelle auch noch gar nicht sooo wichtig. Einerseits soll dir nur schon mal ein Gefühl dafür gegeben werden, wie wir ABM in Python umsetzen können und auf welche Weisen wir das im Verlauf dieses Kurses machen werden. Andererseits ging es mir bei diesem Exkurs darum, dass du im nun folgenden Abschnitt nicht verwundert bist, warum wir plötzlich “Funktionen” ausführen, indem wir diese hinten an Objekte anhängen.