2017-05-16 7 views
0
class Class(): 
    def __init__(self, id, name): 
     self.id = id 
     self.name = name 


class1 = Class(1, "Adam") 
class2 = Class(2, "Bob") 
class3 = Class(3, "John") 

player_id = 1 

if player_id == class1.id: 
    print class1.name 

elif player_id == class2.id: 
    print class2.name 

elif player_id == class3.id: 
    print class3.name 
#etc 

私がやりたいことは、このコードを短縮することです。私が作るすべてのクラスについて、もう1つのブロックを追加する必要があり、それはしばらくしてから狂ってしまいます。 player_idがクラスと同じであるかどうかを調べ、IDが一致する場合はそのクラスのインスタンスを制御します(名前を見つける)。インスタンス変数を使用してクラスの特定のインスタンスを制御する

答えて

1

一般に、O(1)ルックアップを実行するには、 dictionaryを使用してマッピングを作成する必要があります。

id_map = {c.id: c for c in [class1, class2, class3]} 
print id_map[player_id].name 
+0

これは正解と思われますが、実際のコードに転送して動作するかどうかを確認します。ありがとうございます:) –

+0

ああ、私は質問にひどいです。私はクラスの名前は実際にはリストであることは言及していない、それがすべてを変更することを認識していない。あなたの答えは尋ねられた質問にぴったりですが、私がしていることへの答えはないと思います。それをもう少し見て、リストを変更する能力を失うことなく、それは不可能だと思われます(これは非常に重要です)。 –

+0

@AdamBurrosリストを比較しようとしていますか?または、値がリストに存在するかどうかを判断するだけですか? –

関連する問題