Динамически создаваемые классы - Python - PullRequest
20 голосов
/ 12 октября 2010

Мне нужно динамически создать класс. Для более подробной информации мне нужно динамически создать подкласс класса Form Джанго.

Динамически я намереваюсь создать класс на основе конфигурации, предоставленной пользователем.


, например

Я хочу класс с именем CommentForm , который должен подкласс класса Form

В классе должен быть список выбранных атрибутов

.... в данном случае

name = forms.CharField ()

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


Есть полезные советы? :)

Ответы [ 2 ]

32 голосов
/ 12 октября 2010

Вы можете создавать классы на лету, вызывая встроенный type, передавая соответствующие аргументы, например:

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

Работает с классами нового стиля. Я не уверен, будет ли это работать с классами старого стиля.

12 голосов
/ 12 октября 2010

Классы могут быть определены почти везде.

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

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