У меня есть модуль 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
внутри самого модуля.
Это кажется довольно очевидным. Может кто-нибудь сказать мне, что мне не хватает?
import sys
getattr(sys.modules[__name__], 'A')
Вы можете разбить это на один оператор for, но это приведет к беспорядку дублирования кода.
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]
Большое спасибо. У меня есть фильтр определенного типа, который мне понадобится для обработки материала, но на самом деле ключевым моментом был sys.modules.
classes = [x for x in globals().values() if isinstance(x, type)]
Ах, sys.modules - это именно то, что я искал. Большое спасибо. :)