[Python-de] Klassen rekursiv in einem Modul instantiieren

Florian Diesch diesch at spamfence.net
Di Okt 9 17:38:14 EDT 2018


Am 2018-10-09 22:29, schrieb Philipp Kraus:
> In der algorithm.py ist eine Basis Klasse implementiert, die die
> Klasse in foo.py ableitet, somit ist jede Klasse unterhalb von
> algorithm immer von der Klasse Algorithm in algorithm.py abgelietet.
> Ich möchte jetzt in der __main__.py einmal rekursiv über alle *.py
> Dateien in algorithm durch gehen und aus jeder *.py Datei die Klasse
> instantiieren
> 
> Ich brauche so etwas
> 
> l = []
> for i in getAllKlasse_in_algorithm():
>       if i instaceof Algorithm
>          l.append(i())


Ich würde das über eine Metaklasse machen, die die Klassen in einer 
Liste sammelt:


algo_list = []

class AlgoMeta(type):

     def __init__(cls, name, bases, adict):
         type.__init__(cls, name, bases, dict)
         algo_list.append(cls)


class Algorithm(metaclass=AlgoMeta):
     pass

class A(Algorithm):
     pass

class B(A):
     pass

class C(Algorithm):
     pass




print(algo_list)






Mehr Informationen über die Mailingliste python-de