5

我有一个 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模块本身内部的一种模块。

这似乎很明显。有人可以告诉我我错过了什么吗?

4

3 回答 3

9
import sys
getattr(sys.modules[__name__], 'A')
于 2008-11-28T22:16:19.110 回答
5

您可以将其粉碎成一个 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]
于 2008-11-28T22:20:10.147 回答
2
classes = [x for x in globals().values() if isinstance(x, type)]
于 2008-11-28T23:17:31.263 回答