[Python-de] Klassen rekursiv in einem Modul instantiieren
Philipp Kraus
philipp.kraus.flashpixx at gmail.com
Mi Okt 10 01:21:24 EDT 2018
Danke für die 2 hilfreichen Antworten.
Ich habe aktuell in meiner algorithm.py eine Klasse
class Algorithm(object) :
....
und dann entsprechend in allen anderen *.py
class MyAlgo(Algorithm):
...
meine Frage ist, wie importiere ich "alles", ich habe es mit __all__ in der __init__.py probiert, ich möchte in meiner __main__.py am liebsten from mymodule.algorithm import * sagen können und dann einmal über alle iterieren können.
Ich scheitere aktuell an dem "Gesamtimport
Phil
Am Mittwoch, 10. Oktober 2018 00:08:49 UTC+2 schrieb Peter Otten:
> Philipp Kraus wrote:
>
> > Ich brauche so etwas
> >
> > l = []
> > for i in getAllKlasse_in_algorithm():
> > if i instaceof Algorithm
> > l.append(i())
> >
> > Wie komme ich an alle Klasse dran. Später sollen noch weitere Submodule /
> > Klassen hinzu kommen und ich möchte im Grunde in der __main__.py eine
> > generische Routine haben, die einfach alles einlist
>
> Nachdem alle Sub-Module importiert sind, kannst du __subclasses__() rekursiv
> aufrufen (bei entsprechender Klassenhierarchie sind Dopplungen möglich).
>
> >>> class A: pass
> ...
> >>> class B(A): pass
> ...
> >>> class C(B): pass
> ...
> >>> A.__subclasses__()
> [<class '__main__.B'>]
> >>> B.__subclasses__()
> [<class '__main__.C'>]
> >>> def subclasses(cls):
> ... yield cls
> ... for c in cls.__subclasses__():
> ... yield from subclasses(c)
> ...
> >>> list(subclasses(A))
> [<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>]
Mehr Informationen über die Mailingliste python-de