Skip to main content

Module

Wenn wir gerade erst Programmieren gelernt haben, sind alle Programme die wir schreiben sehr kurz und bestehen aus einer oder wenigen zusammengehörenden Funktionen/Prozeduren. Auch entsprechen die Programme, die wir schreiben meist nur kleinen Fingerübungen ohne praktischen Nutzen. Wenn wir ein neues Programm schreiben, beginnen wir wieder von null ohne die zuvor geschriebenen Programme zu nutzen. Sobald wir aber Programmieren für die Lösung unserer Aufgaben in der Arbeit oder Forschung einzusetzen, sind wir in einer ganz anderen Situation. Unsere Programme erfüllen eine nützliche Funktion, die wir vielleicht auch in einem anderen Kontext wieder nutzen oder anderen Personen im Fachgebiet zur Verfügung stellen wollen.

Natürlich könnten wir jeweils einfach den Quellcode des Programms kopieren und jeweils im neuen Programm wiederverwenden. Dies würde aber schnell unübersichtlich und Fehleranfällig werden. Zum Beispiel müsste jede Verbesserung und Weiterentwicklung des kopierten Codes dann an jeder manuell eingepflegt werden.

Für dieses Problem stellt uns Python mit Modulen bereits eine Lösung zur Verfügung.

Module in Python

Ein Modul in Python ist einfach eine Datei, in der Python Funktionen und Klassen definiert sind. Der Name des Moduls ist der Name der Datei, ohne die Endung .py. Zum Beispiel könnten wir ein Modul geometry definieren, indem wir eine Datei geometry.py erzeugen und darin entsprechende Definitionen machen. Diese könnten zum Beispiel wie folgt aussehen:

class Point:
def __init__(self, x, y):
self.x = x
self.y = y

class Circle:
def __init__(self, center, radius):
self.center = center
self.radius = radius

pi = 3.1415926

def computeAreaOfCircle(circle):
return circle.radius ** 2 * pi

Wir haben hier zwei Klassen, eine Konstante und eine Funktion definiert. Diese Definitionen sind, wie wir sehen, einfach normaler Python Code.

Nutzen des Modules

Wenn wir nun das Modul aus einer anderen Datei nutzen wollen, müssen wir die Funktionalität zuerst importieren. Dazu nutzen wir die import Anweisung. Diese können wir auf verschiedene Weise nutzen. Bei der ersten Form schreiben wir einfach import gefolgt vom Namen des Moduls. Um eine Definition des Moduls zu nutzen, müssen wir davor den Namen des Moduls, getrennt durch einen Punkt, schreiben.

import geometry

# Nutzern der importierten Definitionen
print(geometry.pi)
circle = geometry.Point(2, 3)
geometry.computeAreaOfCircle(circle)

Wenn uns der Name des Moduls zu lange ist, können wir diesen auch direkt in der Import Anweisung umbenennen. Zum Beispiel könnten wir das Modul geometry wie folgt unter dem Namen geom zur Verfügung stellen:

import geometry as geom

# Nutzern der importierten Definitionen
print(geom.pi)
circle = geom.Point(2, 3)
geom.computeAreaOfCircle(circle)

Wir können auch selektiv einzelne Definitionen zur Verfügung stellen. Wir schreiben dafür einfach from MODULNAME import Definition1, ... DefinitionN:

from geometry import  Point, pi

# Nutzern der importierten Definitionen
point = Point(3, 1)
print(pi)

Wie wir sehen können wir bei dieser Form die importierten Definitionen ohne Angabe des Modulnamens nutzen.

Wenn wir alle Definitionen im Modul verfügbar machen wollen, können wir statt der Liste der Definition einfach einen * schreiben:

from geometry import *

# Nutzern der importierten Definitionen
point = Point(3, 1)
print(pi)

Diese letzte Form muss man jedoch etwas mit vorsicht nutzen, da diese bei grossen Modulen eine Vielzahl neuer Definition verfügbar machen, die eventuell mit unseren eigenen Definitionen in Konflikt stehen können.