如何正确地实现列表作为实例变量?

2024-10-03 11:13:51 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我正在阅读一篇关于使用Python编程的介绍,并做一些练习,以供我自己借鉴。我正在学习自定义类,其中有一部分说:“程序应该使用一个名为Quizzes的类,它有一个实例变量来保存六个等级的列表……”因此我尝试了以下方法:

class Quizzes:

    def __init__(self, grade1=0):
        self._grade1 = grade1

    def setGrade1(self, grade1):
        self._grade1 = grade1

    def getGrade1(self):
        return self._grade1

    def grades(self):
        return []

    def gradeInsert(self, a=grades()):
        a.append(self._grade1)

在本例中,我得到“TypeError:grades()缺少1个必需的位置参数:‘self’。你知道吗

我也试过:

   def __init__(self, grade1=0, grades=[]):
       self._grade1 = grade1
       self._grades = grades

   def setGrade1(self):
       self._grade1 = grade1

   def setGrades(self):
       self._grades = [self.getGrade1()]

   def getGrades(self):
       return self._grades

但我得到了一个空白[]。我在初始化中对grades=[]所做的任何修改都会反映在getGrades调用中。那我怎么才能真正设定好成绩呢?还是我完全偏离了目标?你知道吗


Tags: 实例方法self程序列表returninitdef
2条回答

实例变量应该在__init__内部初始化

class Quizzes:

    def __init__(self):
        self._grades = [] # Here, we initialize the list

    def grades(self):
        return self._grades # We can return the instance variable here

    def gradeInsert(self, a): # No reason for a default argument here
        self._grades.append(a) # Add the value to the list

在第一个示例中,您尝试调用grades(),它是Quizzes类的成员函数。成员函数期望实例作为第一个参数,或者在点(the_instance.grades())之前,或者作为(不太常见的)显式参数(grades(the_instance))。两者都不提供,因此Python会抱怨。你知道吗

在您的第二个示例中,不清楚在定义类之后您实际做了什么。你知道吗

一般来说,这两门课与练习没有太大关系,可以通过以下方法解决:

class quizzes(object):
  def __init__(self, grades = None):
    if grades is None:
      self.grades = [0]*6
    else:
      self.grades = grades[:6]

顺便说一句:不建议使用可变对象作为默认参数,因为该对象在所有调用之间是共享的。你知道吗

相关问题 更多 >