Hi,
ich will ein Python Modul zur Laufzeit nachladen, dieses enthält dann eine Klasse die ich instanzieren will.
Mein Problem ist das ich überhaupt nicht weiß wo ich da ansetzten kann.
Bisher weiß ich nur das ich das Modul m imp laden kann, alledings weiß ich dann nicht wie herrausfinde wie die klasse heißt.
jeroen
Modul zur laufzeit laden
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
suchst du __import__: http://docs.python.org/dev/library/func ... l#__import__ ?
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Er weiss ja schon wie er das Modul lädt 
Per se geht das nicht, welche Hinweise hast du denn auf die Klasse? Erbt sie von einer anderen? Hat sie charakteristische Attribute?
Was willst du eigentlich machen? Alles was mir zu deinem Ansatz einfällt führt zu einem recht instabilen Kartenhäuschen.

Per se geht das nicht, welche Hinweise hast du denn auf die Klasse? Erbt sie von einer anderen? Hat sie charakteristische Attribute?
Was willst du eigentlich machen? Alles was mir zu deinem Ansatz einfällt führt zu einem recht instabilen Kartenhäuschen.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Über den Output von `dir` iterieren:
Eine andere Möglichkeit wäre es `inspect.getmembers(MODUL)` zu nutzen. das gibt dir den Namen und seinen Typ als Tupel zurück.
Code: Alles auswählen
In [1]: class AB(list):
...: pass
In [2]: issubclass(AB, list)
Out[2]: True
hi,
ok mit dir gekommt man leider auch die importieren module im modul zurück. Das zu dem Problem führt das issubclass(AB, AB) = True ist.
Ein weiters Problem ist, wenn ich nur den Name der Klasse hätte wie mache dann ein object daraus ?
jeroen
ok mit dir gekommt man leider auch die importieren module im modul zurück. Das zu dem Problem führt das issubclass(AB, AB) = True ist.
Ein weiters Problem ist, wenn ich nur den Name der Klasse hätte wie mache dann ein object daraus ?
jeroen
Code: Alles auswählen
In [1]: class A(object):
...: pass
...:
In [2]: class B(A):
...: pass
...:
In [3]: print A.__subclasses__()
[<class '__main__.B'>]
In [4]: print B.__name__ == "B"
True
Ich nutze für soetwas gerne diese Möglichkeit.
a.py ist dann so etwas wie ein pluginsystem Modul. b.py irgendein Plugin was importiert wird und c.py irgendein anderes Modul.
a.py ist dann so etwas wie ein pluginsystem Modul. b.py irgendein Plugin was importiert wird und c.py irgendein anderes Modul.
- cofi
- Python-Forum Veteran
- Beiträge: 4432
- Registriert: Sonntag 30. März 2008, 04:16
- Wohnort: RGFybXN0YWR0
Indem du sie aufrufst:
Code: Alles auswählen
In [19]: a = []
In [20]: type(a)
Out[20]: <type 'list'>
In [21]: type(a)()
Out[21]: []
In [22]: b = type(a)()
In [23]: type(b)
Out[23]: <type 'list'>