获取对象内存位置而不是值本身

问题描述 投票:0回答:2

我正在编写一个问答游戏,在尝试执行时得到了奇怪的结果。 这是主要代码:

question_bank = []
for question in question_data:
   question_text = question["text"]
   question_answer = question["answer"]
   new_question = Question(question_text, question_answer)
   question_bank.append(new_question)

quiz = QuizBrain(question_bank)

while quiz.still_has_questions():
   quiz.next_question()

这是涉及的班级:

class QuizBrain:
   def __init__(self, q_list):
      self.question_number = 0
      self.question_list = q_list

   def still_has_questions(self):
      return self.question_number < len(self.question_list)

   def next_question(self):
      current_question = self.question_list[self.question_number]
      self.question_number += 1
      input(f"Q.{self.question_number}: **{current_question}** (True / False): ")

运行代码后,我得到这一行:

问题 1:****(正确/错误):

不知道为什么“current_question”返回位置而不是值。

python class object
2个回答
0
投票

您应该在

__str__
类中定义
__repr__
和/或
Question
函数。 例如:

class Question:
    def __init__(self, question_text: str, question_answer: str):
        self.question_text = question_text
        self.question_answer = question_answer

    def __str__(self) -> str:
        return self.question_text
    
    def __repr__(self) -> str:
        return f'Question({self.question_text=}, {self.question_answer=})'
>>> q1 = Question('1 > 2 ?', 'False')
>>> print(q1) 
1 > 2 ?
>>> print(repr(q1))
Question(self.question_text='1 > 2 ?', self.question_answer='False')

0
投票

这是因为你调用的不是当前问题的文本,而是整个问题。 next_question 方法中的第 12 行应该这样完成:input(f"Q.{self.question_number + 1}: {current_question.text} (True or False): ")

© www.soinside.com 2019 - 2024. All rights reserved.