2017-05-27 2 views
2

Ich möchte alle Klassen in einem Modul finden, die eine "Basisklasse" erbt, und das Modul wird durch eine Zeichenfolge angegeben.
Zum BeispielAuf der Suche nach Modulen/Klassen durch Zeichenfolge angegeben

for c in find_classes('robo.extras.contrib') : 
o = c() 
o.process(argv = self.argv[1:]) 

Im obigen Beispiel sieht find_classes durch alle Module in robo.extras.contrib für Klassen, die eine Klasse mit dem Verfahren process instanziiert es erbt und führt das Verfahren.

Ich habe durch python.org gesucht, aber scheint nicht die Antwort auf diese eine zu finden, wenn mir jemand in die richtige Richtung zeigen könnte oder mir sogar eine schnelle Probe hier geben würde, wäre ich sehr glücklich.

Thanks :)

Antwort

0
import inspect, importlib 
def find_classes(module, with_method=None): 
    module = importlib.import_module(module) 
    return [ 
     c for _, c in inspect.getmembers(module, inspect.isclass) 
     if not with_method or with_method in dir(c) 
    ] 

und dann:

for c in find_classes('robo.extras.contrib', with_method='process'): 
... 
+0

Absolut genial! Ich habe erwartet, dass es viel komplizierter ist, aber Ihr Ausschnitt ist kurz und einfach zu verstehen. Vielen Dank :) – Rayne

Verwandte Themen