2012-11-29 165 views
8

注册动态类我已经模块FOO,这个模块里面我动态创建的类:蟒蛇如何在模块

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

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

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

你知道如何做到这一点吗?

+0

语法纳粹无处不在;) – mnowotka

+1

语法nazi! :-P –

回答

13

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

备选地,来自另一个模块,可以在foo添加Bar作为一个属性:

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名称。

+0

在全球范围内。 –

+0

如果名称是动态生成的,该怎么办?在这种情况下你不能这样做。 – mnowotka

+0

当我打印generatedClass .__模块___时,我发现它与foo不同。其实我想将它放在该模块中,而不是放在foo中。我应该在这种情况下编写setattr(generatedClass .__ module__,generatedClass .__ name__,generatedClass)吗? – mnowotka