17

我有模块 foo,在这个模块中我动态创建了类:

def superClassCreator():
    return type("Bar", (object,), {})

现在,我想要实现的是让这个新的动态类作为这个模块的一个类可见:

import foo
dir(foo)
>>> [... 'Bar' ...]

你知道怎么做吗?

4

1 回答 1

22

您可以使用Bar = superClassCreator()in foo(在模块级别)。

或者,从另一个模块,您可以添加Bar作为属性foo

import foo

foo.Bar = superClassCreator()

或者,如果必须从生成的类中获取名称:

import foo

generatedClass = superClassCreator()
setattr(foo, generatedClass.__name__, generatedClass)

foo模块中,您可以直接在以下位置进行设置globals()

generatedClass = superClassCreator()
globals()[generatedClass.__name__] = generatedClass
del generatedClass

使用可选del语句generatedClass再次从命名空间中删除名称。

于 2012-11-29T11:21:29.437 回答