简单的Python类不会工作

时间:2014-08-02 03:17:18

标签: python

我擅长python。我刚刚开始学习课程,我试图上课。它似乎不起作用,它每次都给我错误。该代码用于计算学生的平均值。对不起,如果很多代码都错了,对我来说这是一个干的... TY

我的代码:

class studentgrades:


  def __init__(self,grades,num_of_grades,grades_total):
      self.grades = []

      self.num_of_grades = num_of_grades
      self.num_of_grades = 0

      self.grades_total = grades_total
      self.grades_total = 0


  def studentaverage(self,average):
      self.average = average

      for i in grades:
          self.num_of_grades += 1

      for i in grades:
          self.grades_total += i

      self.average = self.grades_total / self.num_of_grades

student1 = studentgrades(100,0,0)

print student1.studentaverage

这是我的错误消息:

<bound method studentgrades.studentaverage of <__main__.studentgrades instant at 0x0229CE90>>

3 个答案:

答案 0 :(得分:2)

首先,您将self变量初始化为空列表,并将0初始化为__init__方法的参数。这通常会使你通过类的任何参数无效,立即将它们重置为空。

另外,要调用类的方法,请传递它所需的参数数量。如果你正在调用一个没有参数的方法,你仍然需要打开和关闭括号,例如student1.studentaverage()

我将如何做到这一点。

class studentgrades:

    def __init__(self,grades):
        self.grades = grades

        self.num_of_grades = len(grades)

        self.grades_total = sum(grades)

    def average(self):
        return self.grades_total / self.num_of_grades

grades = [100, 82, 75, 93]
student1 = studentgrades(grades)
print student1.average()

这样,你只需要在课程中输入成绩列表。

更好的是,使用 TheSoundDefense 的建议,您可以通过调用__init__和{{1}来消除在sum方法中定义另外两个变量的需要} len方法中grades列表的方法。

average

答案 1 :(得分:1)

我想到的一点是,首先代码没有正确缩进。其次,你不能调用类似student1.studentaverage的函数。而不是它必须是student1.studentaverage(param)。替换param你的参数。

答案 2 :(得分:0)

亚当史密斯是正确的。您需要修改studentaverage函数以添加返回值:

def studentaverage(self,average):
    ...
    return self.average

然后修改你的print语句:

print studentaverage()