Path: csiph.com!aioe.org!.POSTED!not-for-mail From: Peter Otten <__peter__@web.de> Newsgroups: de.comp.lang.python Subject: Re: Klassen rekursiv in einem Modul instantiieren Date: Wed, 10 Oct 2018 00:08:47 +0200 Organization: None Lines: 34 Message-ID: References: NNTP-Posting-Host: f4CuKs0rznK+XBAxWGjE2w.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Complaints-To: abuse@aioe.org User-Agent: KNode/4.13.3 X-Notice: Filtered by postfilter v. 0.8.3 Xref: csiph.com de.comp.lang.python:5270 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__() [] >>> B.__subclasses__() [] >>> def subclasses(cls): ... yield cls ... for c in cls.__subclasses__(): ... yield from subclasses(c) ... >>> list(subclasses(A)) [, , ]