Anfängerfrage: Modularisieren und Namensräume
Verfasst: Donnerstag 6. Mai 2010, 08:17
Hallo Zusammen
Ich habe mal wieder eine Frage, ich denke ich begreiffe da etwas noch nicht. Wie der Titel schon ankündigt, geht es um das Modularisieren eines Programm und die Namensräume.
Da mein "Testprogramm" so langsam aber sicher unübersichtlich wurde, habe ich alles in eigene Module ausgelagert.
Etwas vereinfacht sieht es so aus:
Dafür habe ich ein Modul mit meinen Kontrollfunktionen und in einem Packet "classes" eines mit meiner Klasse. beispiel.py ist meine Hauptfunktion. Inerhalb sieht es etwa so aus:
control.py:
myclass1.py
#Klasse Myclass1
Mein Problem ist nun, dass meine Klasse nicht von der funktion2 des Moduls controls gefunden wird. Dies ist ja eigentlich auch logisch, das Problem ist nun, dass ich keine Ahnung habe, wie man dies professionel löst.
So viel mir ist, sollte man ja nicht alles in den globalen Namensraum einbinden, aber wie kann man dann einem lokalen Namensraum eine Funktion/Klasse eines anderen Moduls übergeben?
Das zweite, was mir in diesem Fall aufgefallen ist, ist dass wenn ich nun nur das Modul control starte, dass es automatisch irgendwie beispiel.py auch noch ausführt, da die "liste" im globalen Namensraum auftaucht. Ist dies normal?
Und noch eine Nebenfrage: Wie löscht man in der laufenden Pythonshell die Namensräume und alle Variablen (=alles)? Wenn ich Änderungen in einem Modul mache und ich das Hauptprogramm neu starte, hat er immer noch die alten Angaben...
grüsse
angwedh
Edit (BlackJack): Verzeichnisstruktur in Code-Tags gesetzt, damit man die Struktur auch erkennen kann.
Ich habe mal wieder eine Frage, ich denke ich begreiffe da etwas noch nicht. Wie der Titel schon ankündigt, geht es um das Modularisieren eines Programm und die Namensräume.
Da mein "Testprogramm" so langsam aber sicher unübersichtlich wurde, habe ich alles in eigene Module ausgelagert.
Etwas vereinfacht sieht es so aus:
Code: Alles auswählen
-beispiel.py
-control.py
-classes (ordner)
- __init__.py
- myclass1
Code: Alles auswählen
#Beispielsprogramm für mein Problem:
from classes.myclass1 import Myclass1
from control import funktion1, funktion2
#Main
liste = []
funktion1(liste, 'Erstes Element')
funktion2(liste, 'Bla')
print(liste)
control.py:
Code: Alles auswählen
#Inhalt von Modul control:
def funktion1(liste, element):
liste.append(element)
def funktion2(liste, bla):
liste.append(Myclass1(bla,bla))
myclass1.py
#Klasse Myclass1
Code: Alles auswählen
class Myclass1(object):
def __init__(self, name, bla):
self.name = name
self.bla = bla
So viel mir ist, sollte man ja nicht alles in den globalen Namensraum einbinden, aber wie kann man dann einem lokalen Namensraum eine Funktion/Klasse eines anderen Moduls übergeben?
Das zweite, was mir in diesem Fall aufgefallen ist, ist dass wenn ich nun nur das Modul control starte, dass es automatisch irgendwie beispiel.py auch noch ausführt, da die "liste" im globalen Namensraum auftaucht. Ist dies normal?
Und noch eine Nebenfrage: Wie löscht man in der laufenden Pythonshell die Namensräume und alle Variablen (=alles)? Wenn ich Änderungen in einem Modul mache und ich das Hauptprogramm neu starte, hat er immer noch die alten Angaben...
grüsse
angwedh
Edit (BlackJack): Verzeichnisstruktur in Code-Tags gesetzt, damit man die Struktur auch erkennen kann.