321
11.2
Module speichern und importieren
Programmlauf:
Erläuterung:
Das Skript ist – so wie es ist – lauffähig. Wenn man es startet (z.B. von IDLE aus mit
EDIT
RUN SCRIPT), liefert es die oben angegebene Bildschirmausgabe. Das Hauptprogramm dient
allein dem Testen. Man bezeichnet es auch als Testumgebung. In der Testumgebung wer-
den Instanzen der Klasse gebildet und jede Methode einmal aufgerufen. Beim Testen sollte
man dafür sorgen, dass jede Programmzeile einmal ausgeführt wird. Bei Skripten, die Kon-
trollstrukturen (z.B. Programmverzweigungen, Schleifen) enthalten, müssen Methoden
unter Umständen mehrmals und mit unterschiedlichen Argumenten aufgerufen werden.
Welchen Sinn hat aber die
if-Anweisung (#1)? Wenn man das Skript als Modul verwendet
und innerhalb eines anderen Skripts importiert, soll natürlich nichts auf den Bildschirm
geschrieben werden. Man möchte dann allein die Klassendefinition verwenden. Mit der
if-
Anweisung erreichen wir, dass die Testanweisungen übersprungen werden, wenn das Modul
importiert wird. In Zeile
#1 wird getestet, ob dieses Modul gerade vom Interpreter ausgeführt
wird. Die Variable
__name__ enthält nämlich den Namen des Moduls, und der lautet für das
Hauptmodul, das vom Interpreter gerade ausgeführt wird, immer
__main__. Wenn das
Modul dagegen importiert wird, enthält die Variable
__name__ den Modulnamen geld. Der
Modulname ergibt sich aus dem Dateinamen, indem man die Extension
.py weglässt.
Der Vorteil dieser Testumgebung mit Bedingung ist folgender: Man kann das Modul ein-
schließlich des Hauptprogramms so belassen, wie es ist, und in einem Modulordner für
spätere Projekte aufbewahren. Die Testanweisungen stören nicht. Sie können eventuell spä-
ter, falls man nochmals nach Fehlern suchen muss, wiederverwendet werden.
11.2 Module speichern und importieren
Mit Blick auf die Wiederverwendbarkeit ist es sinnvoll, Klassendefinitionen in eigenen
Dateien abzuspeichern. Auf diese Weise sind sie für neue Skripte verfügbar und brauchen
nur noch importiert zu werden. Eine solche Datei mit Klassendefinitionen nennt man
Modul. Ihr Dateiname endet mit der Extension
.py. Grundsätzlich kann aber ein Modul
nicht nur Klassendefinitionen, sondern auch Funktionsdefinitionen, Konstanten und direkt
ausführbare Python-Anweisungen enthalten.
Um in einem Skript ein Modul verwenden zu können, muss es importiert werden. Tabelle
11.1 zeigt die üblichen Formate für import-Anweisungen (siehe auch Abschnitt 2.7.2).
Der Name des Moduls, der in der
import-Anweisung verwendet wird, ist immer der Datei-
name ohne die Extension
.py.
100 Euro: EUR 100.00
100 EUR + 100 USD: EUR 185.00
100 EUR > 100 USD : True
100 USD in Euro: 84.998
Kapitel 11
Klassenbibliotheken in Modulen speichern
322
Bei einer solchen Anweisung sucht der Python-Interpreter nach einer Datei namens
modul.py. Findet er sie nicht, gibt es einen ImportError. Python sucht in den Verzeichnis-
sen, die in der Variablen
sys.path aufgeführt sind. Diese enthält eine Liste mit Pfaden zu
verschiedenen Verzeichnissen für Module. Mit den zwei folgenden Anweisungen können
Sie sich diese Liste ansehen.
Unter Windows sieht das Ergebnis ungefähr so aus:
Wenn Sie vorher mit IDLE eine Python-Datei geöffnet haben, erscheint zusätzlich noch der
Pfad dieser Datei zu Beginn der Liste. Das bedeutet: Alle Module, die sich im gleichen Ver-
zeichnis befinden, können sich gegenseitig finden. Mehr dazu im nächsten Abschnitt.
import-Anweisung und
Instanziieren eines Objektes
Erläuterung
import modul
objekt=modul.Klasse()
Der Name des Moduls wird in den Namensraum
importiert. Bei der Instanziierung muss dem Namen
der Klasse der Name des Moduls vorangestellt werden.
from modul import Klasse
objekt=Klasse()
Aus dem Modul wird allein der Name der Klasse in den
Namensraum importiert. Bei der Instanziierung reicht
der Name der Klasse.
from modul import *
objekt=Klasse()
Aus dem Modul werden sämtliche Namen importiert.
Bei sehr umfangreichen Modulen mit vielen Namen
droht die Gefahr einer Namenskollision. Das heißt,
wenn ein Name, der in dem Modul vorkommt, bereits
im lokalen Namensraum existiert, wird er überschrie-
ben und bezeichnet nun ein Objekt aus dem Modul.
Bei der Instanziierung reicht wiederum der Name der
Klasse.
Tabelle 11.1: Formate für den Import einer Klasse aus einem Modul
>>> import sys
>>> for p in sys.path:
print(p)
C:\Python35\Lib\idlelib
C:\Python35\python35.zip
C:\Python35\DLLs
C:\Python35\lib
C:\Python35
C:\Python35\lib\site-packages

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.