[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