Как я могу динамически получить набор классов из текущего модуля Python? - PullRequest
5 голосов
/ 29 ноября 2008

У меня есть модуль Python, который определяет количество классов:

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"

Как внутри модуля, как я могу добавить атрибут, который дает мне все классы?

dir () дает мне имена всего из моего модуля, но я не могу понять, как перейти от имени класса к самому классу из в модуле.

Снаружи модуля я могу просто использовать getattr(mod, 'A'), но у меня нет модуля self внутри самого модуля.

Это кажется довольно очевидным. Может кто-нибудь сказать мне, что мне не хватает?

Ответы [ 3 ]

9 голосов
/ 29 ноября 2008
import sys
getattr(sys.modules[__name__], 'A')
5 голосов
/ 29 ноября 2008

Вы можете разбить это на один для утверждения, но это будет иметь грязное дублирование кода.

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]
2 голосов
/ 29 ноября 2008
classes = [x for x in globals().values() if isinstance(x, type)]
...