【问题标题】:How can I make a list or a dictionary with each element being a class instance?如何制作一个列表或字典,每个元素都是一个类实例?
【发布时间】:2017-05-16 20:47:41
【问题描述】:

我不认为下面的设计是个好主意。但是,这是为了考试,他们需要一个列表(技术上是一个数组,因为剑桥非常偏向于 VB 和 Pascal),其中每个元素都属于特定的类类型。这是类图:

此外,董事会要求所有属性都是私有的,即使——根据我对 Python 的基本知识——“私有”属性并不是真正的东西。这是显示问题的代码:

class Question():

    def __init__(self):

        self.__QuestionID = ""
        self.__QuestionText = ""
        self.__Answer = ""
        self.__Mark = ""
        self.__Topic = ""

class Test():

    def __init__(self):

        self.__TestdID = ""
        self.__Questions = [] 
        self.__NumOfQs = None
        self.__MaxMarks = 0
        self.__Level = None
        self.__DateSet = None


    def DesignTest(self):


        self.__NumOfQs = int(self.__NumOfQs)
        self.__Questions = [Question for x in range(self.__NumOfQs)] `        

        for i in self.__Questions:
            i = Question()              
            i.SetQuestion()

最后四行是我的问题区域:我不知道如何实现实例对象列表。

【问题讨论】:

  • "Cambridge 非常偏向于 VB 和 Pascal" 什么?你确定不是真的在谈论Cambridge
  • @ArthurTacca 剑桥国际 A 级考试和 IGCSE 考试是。

标签: python oop


【解决方案1】:

你是对的:Python 没有明确的私有和公共属性。

我不确定您在最后的for 循环中要做什么:您已经有一个列表,除了您用类对象本身而不是实例填充它。试试这个:

self.__Questions = [Question() for x in range(self.__NumOfQs)]

现在您有了一个实例对象列表。如果您需要在每个上调用 SetQuestion,您已经在该循环中设置了它:

for i in self.__Questions:
    i.SetQuestion()

【讨论】:

  • 非常感谢。我不敢相信我忽略了添加这两个括号。
  • 那些是括号;方括号是构成列表的方括号。大括号是卷曲的。我当然可以相信,因为我仍然大约每月犯一次错误。
  • 方括号、大括号、大括号哈哈哈
【解决方案2】:

您可以在列表本身中启动它们。 使用

self.__Questions = [Question() for x in range(self.__NumOfQs)]

然后也试试:

对于我自己.__问题:
i.SetQuestion()

【讨论】:

    【解决方案3】:

    线

    self.__Questions = [Question for x in range(self.__NumOfQs)]
    

    将创建一个包含未实例化对象的列表,与self.__NumOfQs 中的一样多。如果你想创建实例化的对象,就这样做

    self.__Questions = [Question() for x in range(self.__NumOfQs)]
    

    而是跳过最后一行,或者跳过上面的行并执行

    for i in self.__NumOfQs:
        self.__Questions.append(Question())
    

    【讨论】:

      【解决方案4】:

      如果我理解正确,您只想要一个包含Question 类实例的列表?您可以简单地在列表生成中实例化它们。

      self.__Questions = [Question() for x in range(self.__NumOfQs)]
      

      然后你可以完成:

      for i in self.__Questions:             
          i.SetQuestion()
      

      【讨论】:

        猜你喜欢
        • 2023-01-29
        • 2022-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-29
        • 1970-01-01
        相关资源
        最近更新 更多