在变量中声明 class 名称

Declaring class name in variable

我正在构建一个项目,我试图在声明变量之前在变量中声明 class 的名称。

但是当我像这样声明变量时:-

klassName = MyClass

class klassName(models.Model):
    title = models.CharField(max_length=30)

然后它用 KlassName 赋值,而不是我引用它的变量。

然后 我试过了:-

className = 'MyClass'
klass = type(className, (object,), {'msg': 'foobarbaz'})
x = className()

class x():
    title = models.CharField(max_length=30)

正在显示

NameError: name 'className' is not defined

我没有找到任何声明文件。

我确实按照This关注了。但是 none 似乎对我有用。

如有任何帮助,我们将不胜感激。提前致谢。

在你的例子中:

klassName = MyClass

class klassName(models.Model):
    title = models.CharField(max_length=30)

klassName 未引用任何内容,因为未定义 MyClass。 你可以说:

MyClass = klassName

class klassName(models.Model):
    title = models.CharField(max_length=30)

要动态创建 class,您可以使用 type 的三参数形式。要同时动态创建具有相同名称的变量或模块成员,您可以使用 globals() 动态创建变量

globals()['className'] = type('className', (object,), {'foo': 'bar'})

动态创建模型可能稍微复杂一些,但您可以使用抽象基础 class 来定义所有 fields/methods 以方便使用

class Base(models.Model):
    foo = models.CharField(max_length=100)

    class Meta:
        abstract = True

globals()['className'] = type('className', (Base, ), {'__module__': Base.__module__})