I need to dynamically create a class. To go in futher detail I need to dynamically create a subclass of Django's Form class.
By "dynamically" I intend to create a class based on configuration provided by a user.
e.g.
I want a class named CommentForm which should subclass the Form class.
The class should have a list of chosen attributes.
....in this case
name = forms.CharField()
comment = forms.CharField(widget=forms.Textarea())
Any useful tips? :)
-
1"I need to dynamically create a class." This is so rarely needed that you have to provide a lot more information in order for this question to make sense.S.Lott– S.Lott2010年10月12日 14:55:59 +00:00Commented Oct 12, 2010 at 14:55
2 Answers 2
You can create classes on the fly by calling the type built-in, passing appropriate arguments along, like:
CommentForm = type("CommentForm", (Form,), {
'name': forms.CharField(),
...
})
It works with new-style classes. I am not sure, whether this would also work with old-style classes.
1 Comment
type(name, (OldStyleClass, object), attrib_dict) but not type(name, (OldStyleClass,), attrib_dict). If you need the resulting class to be old-style, you can still parametrize the class creation by putting it in a function, like in this answer.Classes can be defined almost anywhere.
def newclass(val):
class C(object):
def __str__(self):
return str(val)
return C
MyClass = newclass(5)
m = MyClass()
print str(m)
1 Comment
C. This is useful if you need to dynamically create an old-style class for some reason.