在我的代码中,我有很多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()
答案 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
。