2016-12-17 6 views
1

私はPythonのクラスについての私の知識を増やすために古いプログラミングの本で見つけた練習問題を試しています。タスクは、ユーザーが学校の一連のテストを設定できるようにするプログラムを作成することです。各テストには10​​個以下の質問を含める必要があります。タスクは、これを行う最善の方法は、封じ込めを使用し、クラス 'テスト'のクラス '質問'を持っていると述べたPythonのクラス間でデータを渡す

基本的に、私はテスト全体の基本をdewfines Quesionと呼ばれるクラスを作成し、質問を設定してそこにある配列に含まれるTestに渡します。私は2つの大きな問題を抱えています。まず、QuestionクラスのsetQuestionオブジェクトを取得して、TestクラスのQuestion配列にデータを渡します。次に、setQuestionオブジェクトをどのように変数numberofQuestionsを反復させるかは、テストクラスに含まれています。

ここにコードがあります。それは、フォーマットから明らかだと確信したが、質問クラスではありませんTestクラス内にある:

class Test(object): 
    def __init__(self): 
     self.__testID = 0 
     self.__maxMarks = 0 
     self.__questions = [] 
     self.__numberofQuestions = 0 
     self.__level = "" 
     self.__dateSet = "" 


class Question(object): 
    def __init__(self): 
     self.__questionID = 0 
     self.__questionText = "" 
     self.__answer = "" 
     self.__marks = 0 
     self.__topic = "" 

    def setQuestion(self, questionID, questionText, answer, marks, topic): 
     self.__numberofQuestions = self.__numberofQuestions + 1 
     self.__questionID = self.__questionID 
     self.__questionText = self.__questionText 
     self.__answer = self.__answer 
     self.__marks = self.__marks 
     self.__topic = self.__topic 
+0

「self .__ questionID = self .__ questionID」で何をしようとしているのか分かりませんが、何もしません。 –

+0

Testクラス内でQuestionクラスを定義するのはなぜですか?私にとって意味をなさない... –

+0

1.なぜあなたのすべての属性にそれらの二重のアンダースコアを使用していますか?その名前付けスキームは、[チュートリアル](https://docs.python.org/3/tutorial/classes.html#private-variables)で説明されているように、名前のマングリングを呼び出すために使用されますが、実際にはここでは必要ありませんしたがって、コードを必要以上に複雑にするだけです。 –

答えて

1

これは私がそれを行うだろうかです:

class Test(object): 
     def __init__(self,id,marks): 
      self.__testID = id 
      self.__maxMarks = marks 
      self.__questions = [] 
      self.__numberofQuestions = 0 
      self.__level = "" 
      self.__dateSet = "" 

     def setQuestion(self,question): 
      self.__numberofQuestions += 1 
      self.__questions.append(question) 

class Question(object): 
     def __init__(self,id,text,answer,marks,topic): 
        self.__questionID = id 
        self.__questionText = text 
        self.__answer = answer 
        self.__marks = marks 
        self.__topic = topic 

今、あなたはの__question配列に質問オブジェクトを置くことができますそのようなテスト:

if __name__ == "__main__": 
     test = Test(1,100) 
     test.setQuestion(Question(1,"Text","Answer",50,"Topic")) 
+0

状況に応じてオブジェクトを渡すためにコンストラクタまたはセッタメソッドを使用できます。 –

関連する問題