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 和调用方法的工作原理。
我不明白这个问题的含义或如何解决它! 我不断遇到问题 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 和调用方法的工作原理。