如何在django / python中动态创建对象?

时间:2013-01-09 00:09:06

标签: python django dynamic

在我的代码中,我有很多if / elif语句,如下所示:

if type == "cat":
    vote = VoteCat (
        user = user,
        cat_id = thing_id )
    vote.save()
elif type == "dog":
    vote = VoteDog (
        user = user,
        dog_id = thing_id )
    vote.save()

更改我的代码以摆脱if语句并动态实例化我需要的对象有什么好方法?我希望我能编写的代码可以完成与上面相同的代码,但看起来更像是这样:

AnimalVote = get_animalvote_by_type(type)
AnimalVote.user = user
AnimalVote.assign_animal_id(thing_id)
AnimalVote.save()

2 个答案:

答案 0 :(得分:6)

最简单的翻译是:

types = dict('cat' = CatType, 'dog' = DogType)
newobj = types[type](user = user, cat_id = thing_id)

显然,这取决于采用相同参数的类型。

答案 1 :(得分:3)

Python中的类是对象,因此您只需将映射名称映射到类:

animal_type_map = {'cat': VoteCat, 'dog': VoteDog}

然后您可以像使用animal_type_map[type]VoteCat一样使用VoteDog