2017-05-16 59 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 

我想要做的就是缩短这段代码。对于我制作的每一个班级,我都必须添加另一个块,并在一段时间后变得疯狂。我希望能够看看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你想比较列表吗?或者只是确定一个值是否存在于列表中? –