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]ます。VoteCatVoteDog

于 2013-01-09T00:18:44.687 に答える