我需要動態創建一個類。爲了進一步詳細說明,我需要動態創建Django的Form類的子類。動態創建類 - Python
通過動態我打算根據用戶提供的配置創建一個類。
例如,
我想叫CommentForm一個類應繼承Form類
類應該有選擇的屬性
列表....在這種情況下
name = forms.CharField()
評論= forms.CharField(小部件= forms.Textarea())
任何有用的提示? :)
我需要動態創建一個類。爲了進一步詳細說明,我需要動態創建Django的Form類的子類。動態創建類 - Python
通過動態我打算根據用戶提供的配置創建一個類。
例如,
我想叫CommentForm一個類應繼承Form類
類應該有選擇的屬性
列表....在這種情況下
name = forms.CharField()
評論= forms.CharField(小部件= forms.Textarea())
任何有用的提示? :)
您可以通過調用type
內置,通過適當的參數一起,像動態創建類:
CommentForm = type("CommentForm", (Form,), {
'name': forms.CharField(),
...
})
它與新式的類。我不確定這是否也適用於舊式課程。
只要它們不是唯一的基類,它就可以與舊式類一起工作。所以例如你可以做'type(name,(OldStyleClass,object),attrib_dict)'而不是'type(name,(OldStyleClass,),attrib_dict')。如果你需要生成的類是舊式的,你仍然可以通過將它放入一個函數來參數化類的創建,就像[這個答案]一樣(http://stackoverflow.com/questions/3915024/dynamically-creating-classes -python/3915110#3915110)。 – intuited 2010-10-15 11:46:52
類可以在幾乎任何地方定義。
def newclass(val):
class C(object):
def __str__(self):
return str(val)
return C
MyClass = newclass(5)
m = MyClass()
print str(m)
對於一些讀者來說,這種技術可以用來設置'C'的基類,這可能並不明顯。如果您出於某種原因需要動態創建舊式類,這非常有用。 – intuited 2010-10-15 11:50:59
如果你想設置類變量,這不起作用 – user178047 2015-10-29 23:43:37
「我需要動態創建一個類。」這是很少需要的,你必須提供更多的信息才能使這個問題變得有意義。 – 2010-10-12 14:55:59