3

在我的代码中,我有很多这样的 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()
4

2 回答 2

6

最简单的翻译是:

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

显然,这依赖于采用相同参数的类型。

于 2013-01-09T00:19:40.920 回答
3

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

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

然后你可以animal_type_map[type]像使用VoteCator一样使用VoteDog

于 2013-01-09T00:18:44.687 回答