在变量中声明 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__})
我正在构建一个项目,我试图在声明变量之前在变量中声明 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__})