2015-01-03 51 views
-1

我不明白這個問題的含義或如何解決它! 我不斷收到問題AttributeError:'list'對象沒有屬性'assignmentScores' 這是什麼意思?我該如何解決這個問題?AttributeError:'list'對象沒有屬性'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)) 
+0

縮進人,請等我先編輯它 – ZdaR

+0

歡迎來到StackOverflow,Oliver。大多數pythonistas對於縮進都很無聊,請修復它。 –

+0

'score = list.append(self,self.assignmentScores)'可以解釋這個語句做了什麼? –

回答

0

首先,請使用4個空格全部縮進,它有很大幫助。 PEP 8是你的朋友,並會保持每個人友好和樂於助人。

至於你的問題,在我自己運行代碼並查看回溯後,它看起來像你自己指定self.assignmentScores列表,所以當你鍵入self.assignmentScores時,你正在查找一個self屬性,它是現在是一個列表而不是類的一個實例。

這個錯誤來自於你調用該方法的方法: calculateAverage(assignmentScores)

這種方法只需要一個參數,它應該是該類學生的實例,但不僅是你直接調用該方法該類不是來自實例,而是使用assignmentScores列表作爲該方法的參數。這使得方法calculateAverage()將self替換爲self.assignmentScores,因此當您嘗試檢查列表是否爲空時,代碼將其讀取爲self.assignmentScore.assignmentScore而不是預期的方式。

您目前定義的類的方式強烈鼓勵您像這樣調用方法。

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

還有一種錯誤站在你解決這個問題後你的方式,但一個很好看的回溯和相關代碼的仔細閱讀會導致你的解決方案。現在你只需要更好地理解類和調用方法。