Python3:如何在__init__函数中动态创建实例

时间:2018-03-10 04:11:20

标签: python-3.x

这个问题的答案必须存在于某个地方但不幸的是我缺乏适当的词汇和术语来找到它。 这是我的问题:

我正在创建一个多项选择题测试,它由幻灯片组成。每张幻灯片包含一个或更多 问题,因此我可以使用这两个不同的幻灯片:

The two slides

与这些幻灯片相关联的代码将记录幻灯片的详细信息,例如问题答案,问题数量等等。 因此,对于每张幻灯片,我的代码都会创建类幻灯片的实例。 我需要做的是为每张幻灯片创建适当数量的问题类的实例:

  • 幻灯片1 - >一个问题实例

  • 幻灯片2 - >三个问题实例

我需要动态创建它们,并且还要动态地访问它们。我怎么做或者甚至可能?

2 个答案:

答案 0 :(得分:1)

这只是一个与您的幻灯片实例相关联的属性,您可以在其中存储对您希望的Quations数量的引用。

该属性可以是列表或字典。假设幻灯片作为参数获得一个“config”,这是一个列表,每个元素包含创建一个Question实例的正确参数:

class Question:
   ...

class Slide:
    def __init__(self, config):
         self.questions = []
         for parameters in config:
              self.questions.append(Question(**parameters))

然后,您可以直接访问slide.questions属性,或者将一些将问题编号作为参数的实用程序函数。

答案 1 :(得分:-1)

它有效!感谢您的帮助,对不起之前没有发布任何代码:我被困住了。

class Question:

    def __init__(self, key):
        self.key = key


class Slide:

    def __init__(self, info):
        self.number_of_questions = info[0]
        self.keys = info[1:len(info)]

        # create questions list
        self.questions = []

        for i in range(self.number_of_questions):
            self.questions.append(Question(self.keys[i]))

现在我正在测试:

info1 = [1, "a"]
slide1 = Slide(info1) 
print(slide1.questions[0].key)

info2 = [3, "a","b","c"]
slide2 = Slide(info2)  
print(slide2.questions[1].key)

在内核中,我得到了以下输出,这就是我想要的:

>>a
>>b
相关问题