Ein Namensraum ist ein (ggf gedachter) Ort, an dem bestimmte Namen existieren. Du heißt vielleicht Peter, aber wenn du mit deinen Kumpels auf Bootstour bist, dann bist du vielleicht “Beule”. Die Bootstour (bzw der Freundeskreis) sind also ein Namensraum. Wichtig hierbei ist die Beobachtung, das ein und dasselbe Ding oder Person mehrere Namen haben kann!
In Python sind zb Module Namensräume. Wenn du “import sys” machst, kannst du mit sys. vorangestellt auf die Namen in sys zugreifen. Wenn du ein Skript startest, hat das auch einen impliziten Namensraum, __main__. Wenn du in diesem Skript eine Funktion foo definierst, dann ist der Code der Funktion aufzufinden eben unter dem Namen foo.
Du kannst namensräume auch zusammenfassen: wenn im Skript “from sys import argv” steht, dann wird argv ein Name in __main__.
Ein Gültigkeitbereich ist auch ein Namensraum. Wenn du ein foo eine Variable bar anlegst, ist die nur in dem Gültigkeitsbereich der Funktion, und vor allem auch nur wenn die aufgerufen wird (in erster Näherung. Closures machen das etwas komplizierter), existent.
Du kannst auch eine Variable argv in foo definieren. Die hat dann Vorrang vor dem mit from... importierten Namen!
Code: Alles auswählen
from sys import argv
def foo():
argv = 10
print(argv)
foo()
Eine Klasse stellt nun eine Art Schablone zur Erzeugung von namensräumen dar! Ein Name, den du in der Klasse im Inititialisator erzeugt hast, gilt nur innerhalb des namesnraumes einer Objektinstanz. Du kannst aber 100 Objekte aus der gleichen Klasse machen.
Dein Auto ist zb ein BMW Q7. Der hat ein Lenkrad, das du nur anfassen kannst, wenn du im Auto sitzt. Aber dein Nachbar hat auch einen Q7 mit Lenkrad. Das ist ja aber ein anderes Lenkrad. BMW Q7 ist als die Klasse, und Lenkrad der Name für das Ding an dem du kurbelst um die Richtung zu ändern - aber NUR wenn du im Auto sitzt, also Zugriff auf das Auto hast.