AttributeError: 'list' object has no attribute 'assignmentScores'

AttributeError: 'list' object has no attribute 'assignmentScores'

我不明白这个问题的含义或如何解决它! 我不断遇到问题 AttributeError: 'list' object has no attribute 'assignmentScores' 这是什么意思?我该如何解决这个问题?

我的代码是:

class Student:
    studentName = ""
    studentCourse = ""
    averageMark = 0
    grade = "none"
    assignmentScores = [1, 2, 3, 4]


    def __init__(self, n, c, a, g,m):
      self.studentName = n
      self.studentCourse = c
      self.averageMark = a
      self.grade = g
      self.assignmentScores = m

    def getName(self):
      return self.studentName

    def getCourse(self):
      return self.studentCourse

    def getAverage(self):
      return self.averageMark

    def getGrade(self):
      return self.grade

    def getMarks(self):
      return self.assignmentScores


    def setAverage(self):
      mark = self.averageMark
      return mark

    def setGrade(self):
      grade = self.grade
      return grade

    def setMarks(self):
      marks = self.setMarks()
      return marks

    def addMark(self):
      score = list.append(self, self.assignmentScores)




    def calculateAverage(self):
      if  len(self.assignmentScores) > 0:
        average = sum(self) / float(len(self.assignmentScores))
        return average
      else:
        return 0

    def determineGrade(self):
      return 0

    print(calculateAverage(assignmentScores))

首先,请所有缩进使用4个空格,这很有帮助。 PEP 8 是您的朋友,它会让每个人都保持友好和乐于助人。

至于你的问题,在 运行 我自己的代码并查看回溯之后,你似乎将 self.assignmentScores 列表分配给了自己,所以当你输入 self.assignmentScores您正在查找 self 的一个属性,它现在是一个列表而不是 class.

的一个实例

这个错误来自于你调用方法的方式: calculateAverage(assignmentScores)

这个方法只需要一个参数,它应该是 class 学生的一个实例,但你不仅是直接从 class 而不是从实例调用该方法,您正在使用 assignmentScores 列表作为该方法的参数。这使得方法 calculateAverage() 将 self 替换为 self.assignmentScores,因此当您尝试检查列表是否为空时,代码将其读取为 self.assignmentScore.assignmentScore 而不是预期的方式。

你现在定义 class 的方式强烈鼓励你像这样调用方法。

billy = Student("","",0,"none",[1,2,3,4]) print(billy.calculateAverage())

你解决这个问题后还有一个错误挡住了你的路,但是好好看看回溯,仔细阅读相关代码,就会找到解决方案。现在您所需要的只是更好地理解 classes 和调用方法的工作原理。