2008-11-28 10 views
5

ich ein Python-Modul haben, die eine Anzahl von Klassen definiert:Wie kann ich dynamisch die Menge der Klassen aus dem aktuellen Python-Modul bekommen?

class A(object): 
    def __call__(self): 
     print "ran a" 

class B(object): 
    def __call__(self): 
     print "ran b" 

class C(object): 
    def __call__(self): 
     print "ran c" 

Von innerhalb des Moduls, wie könnte ich hinzufügen, ein Attribut, das mir alle Klassen gibt?

dir() gibt mir die Namen von allem aus meinem Modul, aber ich kann nicht herausfinden, wie aus dem Namen einer Klasse in die Klasse selbst von innerhalb das Modul gehen.

Von außerhalb des Moduls kann ich einfach getattr(mod, 'A') verwenden, aber ich habe keine self Art von Modul aus dem Modul selbst.

Das scheint ziemlich offensichtlich. Kann mir jemand sagen, was ich vermisse?

Antwort

9
import sys 
getattr(sys.modules[__name__], 'A') 
+0

Ah, sys.modules ist genau das, was ich suchte. Ich danke dir sehr. :) – Dustin

5

Sie können dies in eins für die Aussage zerschlagen, aber das würde chaotisch Codeduplizierung haben.

import sys 
import types 
this_module = sys.modules[__name__] 
[x for x in 
    [getattr(this_module, x) for x in dir(this_module)] 
    if type(x) == types.ClassType] 
+0

Vielen Dank. Ich habe eine bestimmte Art von Filter, den ich brauche, um das Zeug durch zu führen, aber es ist wirklich sys.modules, das war der Schlüssel. – Dustin

2
 
classes = [x for x in globals().values() if isinstance(x, type)] 
+0

Hey, das ist ziemlich nett. Vielen Dank. – Dustin