Я пытаюсь выполнить практическое задание, которое нашел в старой книге по программированию, чтобы расширить свои знания о классах на Python. Задача - создать программу, позволяющую пользователю настроить серию тестов для школы. Каждый тест должен содержать не более 10 вопросов. В задаче говорилось, что лучший способ сделать это - использовать локализацию и иметь класс «Вопрос» внутри класса «Тест».

По сути, я должен создать класс под названием Test, который раскрывает основы всего теста, а затем класс под названием Quesion, который задает вопрос и передает его обратно в Test, чтобы включить его в массив. У меня две серьезные проблемы. Во-первых, как получить объект setQuestion в классе Question для передачи данных в массив Question в классе Test. Во-вторых, как сделать так, чтобы объект setQuestion перебирал переменную numberofQuestions, поскольку она содержится в Test Class.

Вот код. Не уверен, что это ясно из форматирования, но класс Question находится внутри класса 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
1
user1480135 17 Дек 2016 в 10:27
Я не уверен, что вы пытаетесь сделать с self.__questionID = self.__questionID, но это ничего не дает.
 – 
OneCricketeer
17 Дек 2016 в 10:35
Почему вы определяете класс Question внутри класса Test. Для меня это не имеет никакого смысла ...
 – 
Andreas Rau
17 Дек 2016 в 10:38
1. Почему вы используете эти двойные подчеркивания на всех ваших атрибутах? Эта схема именования используется для вызова изменения имени, как описано в учебном пособии < / a>, но здесь это вам действительно не нужно, так что это просто усложняет код, чем он должен быть.
 – 
PM 2Ring
17 Дек 2016 в 11:03
2. Вы можете определить Question внутри Test, но от этого мало пользы, и (опять же) это просто добавляет ненужной сложности коду. Как сказано в Википедии, сдерживание означает использование одного класса внутри другого, это не означает, что содержащийся класс должен быть определен внутри другого класса, он просто должен быть доступен для него.
 – 
PM 2Ring
17 Дек 2016 в 11:03
Знаки подчеркивания рекомендованы в книге, которую я читаю. Я посмотрю на них повнимательнее.
 – 
user1480135
17 Дек 2016 в 14:00

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"))
1
Andreas Rau 17 Дек 2016 в 10:48
Вы можете использовать конструктор или метод установки для передачи ваших объектов в зависимости от ситуации.
 – 
Erfan Gholamian
17 Дек 2016 в 11:02