我有一个包含程序中其他地方使用的信息的类,其中定义了许多实例。我想将所有这些添加到字典中,并将其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,但是没有对课程做太多,所以我不确定什么是可能的。事先感谢,具有类似结果的替代方法也会很棒!
答案 0 :(得分:2)
以下示例应该是您所需要的。
在__init__
中,将对象保存到类变量= Example._ALL_EXAMPLES
,然后您可以通过Example._ALL_EXAMPLES
访问它,即使没有创建此类的任何实例(它返回{{1} }})。
我认为我们应该避免在这里使用全局变量,所以使用类变量会更好。
{}
输出:
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)
答案 1 :(得分:0)
我过去做过的一件事就是将对象添加到类字典中:
class Example:
objects = {}
def __init__(self, name, eg):
Example.objects[name] = self # self.objects also works
...
...
Example.objects[chosen_name]
答案 2 :(得分:0)
你可以将dict传递给你创建的所有对象,如下所示:
class Example:
def __init__(self, name, eg, all_examples):
self.name = name
self.eg = eg
all_examples[name] = self
all_examples = {}
a = Example("a", 0, all_examples)
b = Example("b", 1, all_examples)
c = Example("c", 2, all_examples)
print(all_examples)