我有一个包含信息的类,该信息在程序的其他地方使用,并且定义了许多实例。我想将所有这些添加到字典中,并以它们的name属性作为键(请参见下文),以便用户可以访问它们。

由于我经常制作新的此类对象,因此有什么方法可以自动将它们以相同的方式添加到字典中吗?或当然要列出一个列表,然后我可以迭代该列表以随后添加到字典中。

简化示例:

class Example:
    def __init__(self, name, eg):
        self.name = name
        self.eg = eg

a = Example("a", 0)
b = Example("b", 1)
c = Example("c", 2)
# etc...

# Adding to this dictionary is what I'd like to automate when new objects are defined
examples = {a.name : a,
            b.name : b,
            c.name : c,
            # etc...
            }

# User choice
chosen_name = raw_input("Enter eg name: ")
chosen_example = examples[chosen_name]

# Do something with chosen_example . . .


我对python很熟悉,但是对类却没有做太多事情,所以我不确定是否有可能。取得相似结果的替代方法也将非常棒,谢谢!

最佳答案

下面的示例应该是您所需要的。

__init__中,将对象保存到类变量= Example._ALL_EXAMPLES中,然后即使没有创建此类的任何实例(它返回Example._ALL_EXAMPLES),也可以通过{}访问它。

我认为我们应该避免在这里使用全局变量,因此使用类变量会更好。

class Example:
    _ALL_EXAMPLES = {}
    def __init__(self, name, eg):
        self.name = name
        self.eg = eg
        Example._ALL_EXAMPLES[self.name] = self
print(Example._ALL_EXAMPLES)
a = Example("a", 0)
b = Example("b", 1)
c = Example("c", 2)
# etc...

print(Example._ALL_EXAMPLES)


输出:

{}
{'a': <__main__.Example object at 0x01556530>, 'b': <__main__.Example object at 0x015564D0>, 'c': <__main__.Example object at 0x01556A50>}
[Finished in 0.163s]

09-18 16:02