我有一个包含信息的类,该信息在程序的其他地方使用,并且定义了许多实例。我想将所有这些添加到字典中,并以它们的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]