2015-04-04 158 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

相关问题