动态创建类 - Python

22 投票
2 回答
8186 浏览
提问于 2025-04-16 05:22

我需要动态创建一个类。具体来说,我想动态创建一个Django的 Form 类的子类。

这里的“动态”是指根据用户提供的配置来创建这个类。


比如说,

我想要一个名为 CommentForm 的类,它应该是 Form 类的子类。

这个类应该有一个选定属性的列表。

....在这种情况下

name = forms.CharField()
comment = forms.CharField(widget=forms.Textarea())

有什么有用的建议吗? :)

2 个回答

14

类几乎可以在任何地方定义。

def newclass(val):
  class C(object):
    def __str__(self):
      return str(val)
  return C

MyClass = newclass(5)
m = MyClass()
print str(m)
36

你可以通过调用内置的 type 函数来动态创建类,只需要传入合适的参数,比如:

CommentForm = type("CommentForm", (Form,), { 
    'name': forms.CharField(),
    ...
})

这个方法适用于新式类。我不太确定它是否也适用于旧式类。

撰写回答