Python 动态创建类时发生NameError

Python 动态创建类时发生NameError,python,Python,我正在用Python在运行时创建一个类,它工作得很好: new_class = type("clazz", (object,), {}) globals()["clazz"] = new_class testobject = clazz() 但是,当我尝试将功能外包给其他类时,它失败了: class ClassFactory: @classmethod def spawn_class(name): new_class = type(name, (

我正在用Python在运行时创建一个类,它工作得很好:

  new_class = type("clazz", (object,), {})
  globals()["clazz"] = new_class

  testobject = clazz()
但是,当我尝试将功能外包给其他类时,它失败了:

class ClassFactory:

    @classmethod
    def spawn_class(name):
        new_class = type(name, (object,), {})
        globals()[name] = new_class
        return new_class()
然后,在另一个班级:

ClassFactory.spawn(name="clazz")
testclass = clazz()
错误消息是未定义“clazz”。我假设这是因为clazz是在不同的模块中生成的,但即使我通过

from modules.datahandler.config.class_factory import *

错误消息仍然存在。

在config_factory.py中定义了以下内容(请注意,
classmethod
应将类作为第一个参数)

您应该能够动态创建“clazz”方法,但它可以在模块类工厂中使用。所以你必须导入它才能使用它

>>> from class_factory import ClassFactory
>>> ClassFactory.spawn_class(name="clazz")
<class_factory.clazz object at 0x7f5ad5f2f2d0>
>>> 
>>> from class_factory import clazz
>>> testclass = clazz()    
>>>来自class_工厂导入ClassFactory
>>>ClassFactory.spawn_类(name=“clazz”)
>>> 
>>>来自class_工厂进口分类
>>>testclass=clazz()

我想你可能想要的是一个
静态方法
装饰器,而不是
类方法
装饰器<代码>类方法隐式地将类对象传递给方法

class ClassFactory:
     @staticmethod
     def spawn_class(name):
         new_class = type(name, (object,), {})
         globals()[name] = new_class         
         return new_class()
然后在另一个模块中,导入
ClassFactory
,您应该能够做到这一点

Classfactory.spawn_new(name="clazz")
testclass = clazz()

每个模块都有自己单独的全局名称空间。而从X import执行
*
只导入当时模块中存在的名称,它不会神奇地为您提供任何稍后定义的名称。@jasonharper:是的,事后看来,假设它将导入一个动态创建的类型有点傻。谢谢你的解释。真的,你应该只做
clazz=ClassFactory.spawn(name='clazz')
Classfactory.spawn_new(name="clazz")
testclass = clazz()