自动将python对象添加到字典中

时间:2018-03-30 17:15:14

标签: python class object dictionary

我有一个包含程序中其他地方使用的信息的类,其中定义了许多实例。我想将所有这些添加到字典中,并将其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,但是没有对课程做太多,所以我不确定什么是可能的。事先感谢,具有类似结果的替代方法也会很棒!

3 个答案:

答案 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)