bin relativ neu bei python und arbeite gerade an meinem ersten Projekt, bei dem ich auf ein Namensraumproblem gestossen bin. Ziel ist es Daten, die von einem externen Tool in python beschrieben werden einzulesen und auszuwerten. Diese Daten stehen in *.vec Dateien, die
Code: Alles auswählen
class filter(object):
class a(my_class_a):
...
class vector(object):
def __init__(self, newdata):
self.a = filter.a(newdata)
filter_list = [ filter.vector(...), filter.vector(...), .... ]
testVector.py (Hauptmodul)
Code: Alles auswählen
from vectorTest import *
execfile(sys.argv[1]) # bekommt ein test.vec als Parameter
for vec in filter_list:
testVec(vec)
Code: Alles auswählen
def testVec(vector):
if not (isinstance(vector, filter.vector)):
raise TypeError, "arg should be of type filter.vector"
Ohne die Beschreibung von filter.vector auszulagern in ein importierbares Modul kann ich es in vectorTest.py gar nicht testen/bekannt machen.
Problem Nr2.
Außerdem wird der Test jedes mal getriggert, denn interessanterweise ist in testVec type(vector) ein __main__.vector. Wieso geht hier das filter.* verloren? Selbst wenn ich die Beschreibung auslagere, kann ich nicht gegen __main_.vector testen, sondern gegen filter.*
Habe durch forumsuche inzwischen herausgefunden, daß execfile, import *. from mod import *, unterschiedliche Namensräume aufmachen. Wie kann ich also den anderen Module filter.vector mitgeben/beschreiben, ohne ein erneutes import oder execfile?
Wäre für Hinweise sehr dankbar.
Nikolaus