2015-04-04 111 views
0

我目前有這個錯誤的一個問題:AttributeError錯誤:類型的對象「學生」有沒有屬性「GPA」AttributeError錯誤:類型的對象「學生」有沒有屬性「GPA」

當我嘗試運行以下程序。

class people(object): 
    def __init__(self,name,ID): 
     self.name=name 
     self.ID=ID 

class Student(people): 
    def __init__(self,name,ID,gpa): 
     self.name=name 
     self.ID=ID 
     self.gpa=gpa 

Student.gpa.total.append(self.gpa) 

def mean_gpa(): 
    return sum(Student.gpa_total)/float (len(Student.gpa_total)) 

def info_gpa(self): 
    mean= self.mean_gpa() 
    return mean 
def __str__(self): 
    return self.info_gpa() 

class Employee(people): 
    def __init__(self,name,ID,salary): 
     people._init_(self,name,ID)` 
     self.name=name 
     self.ID=ID 
     self.salary=salary 
     self.employee=employee 
     Employee.emp_total.append(self.employee)` 

def total_salary(): 
    return sum(Employee.emp_total)` 

任何想法我做錯了什麼?

+1

請從代碼中刪除所有的反引號不存在的變量,你已經發布 – 2015-04-04 15:13:40

+0

是,'Student'是一類,那裏的'gpa'是一個類實例屬性。創建一個類型爲student的對象,並且可以引用'gpa'屬性而不出現任何問題' – karthikr 2015-04-04 15:15:59

回答

0

您要訪問Student.gpa這裏:

Student.gpa.total.append(self.gpa) 

我不知道是什麼行是應該做的,但你要訪問它作爲一個靜態變量(一個屬性當它不存在時,而不是類的實例)。 __init__()指定屬性self,這是Student的一個實例,但這不是您訪問的內容。此外,self未在__init__()之外定義。


其實我再次讀你的代碼。它看起來像你想是這樣的:

class Student(people): 
    def __init__(self,name,ID,gpa): 
     self.name=name 
     self.ID=ID 
     self.gpa=gpa 
     try: 
      Student.gpa_total.append(self.gpa) 
     except AttributeError: 
      Student.gpa_total=[self.gpa] 
+3

這可能「起作用」(即不會導致錯誤),但我認爲這隻會進一步混淆OP對實例與類屬性的理解。目前尚不清楚*爲什麼*他們想使用類屬性 - imho,他們不這樣做。 – jedwards 2015-04-04 15:25:36

0

通過pyflakes一個快速運行表明我這兩個錯誤:

  1. 線12:未定義的名稱self

    提示:對於Student.gpa.total.append(self.gpa)行,您指的是self以外的類,所以它是未定義的。

  2. line 29:undefined name employee。裏面的Employee類,self.employee=employee,你設置self.employee一個叫employee

相關問題