2016-12-25 2 views
-2

У меня возникают проблемы с следующим блоком кода Python:Проблемы с позиционными аргументами в Python

class Person: 
    def __init__(self, firstName, lastName, idNumber): 
     self.firstName = firstName 
     self.lastName = lastName 
     self.idNumber = idNumber 
    def printPerson(self): 
     print("Name:", self.lastName + ",", self.firstName) 
     print("ID:", self.idNumber) 

class Student(Person): 
     def _init_(self,firstName,lastName,idNum,scores): 
      self.scores = scores 
      Person.__init__(self, firstName, lastName, idNum) 

     def calculate(self): 
      s = 0 
      for n in self.scores: 
       s = s + n 
      avg = int(s/len(self.scores)) 
      if avg >= 90 and avg <= 100: 
       return 'O' 
      if avg >= 80 and avg <= 90: 
       return 'E' 
      if avg >= 70 and avg <= 80: 
       return 'A' 
      if avg >= 55 and avg <= 70: 
       return 'P' 
      if avg >= 40 and avg <= 55: 
       return 'D' 
      if avg < 40: 
       return 'T' 

    line = input().split() 
    firstName = line[0] 
    lastName = line[1] 
    idNum = line[2] 
    numScores = int(input()) # not needed for Python 
    scores = list(map(int, input().split())) 
    s = Student(firstName, lastName, idNum, scores) 
    s.printPerson() 
    print("Grade:", s.calculate()) 

я получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
File "solution.py", line 43, in <module> 
s = Student(firstName, lastName, idNum, scores) 
TypeError: __init__() takes 4 positional arguments but 5 were given 

Может кто-нибудь помочь мне с этим? Я думаю, что я дал правильное количество аргументов при инициализации объекта s класса Students.

+0

Вам нужно дважды подчеркивания для вашего метода 'Student'' __init__'. Я не совсем уверен, как это приводит к этой ошибке, но это может быть вашей проблемой. – Carcigenicate

ответ

2

Проблема заключается в том, что питон думает, что вы не определили __init__ потому, что вы случайно написали _init_ (только с одним подчеркиванием)

Этот код следует надеяться, сделать трюк:

class Student(Person): 
    def __init__(self,firstName,lastName,idNum,scores): # Changed _init_ to __init__ 
     self.scores = scores 
     Person.__init__(self, firstName, lastName, idNum) 

    def calculate(self): 
     s = 0 
     for n in self.scores: 
      s = s + n 
     avg = int(s/len(self.scores)) 
     if avg >= 90 and avg <= 100: 
      return 'O' 
     if avg >= 80 and avg <= 90: 
      return 'E' 
     if avg >= 70 and avg <= 80: 
      return 'A' 
     if avg >= 55 and avg <= 70: 
      return 'P' 
     if avg >= 40 and avg <= 55: 
      return 'D' 
     if avg < 40: 
      return 'T' 
Смежные вопросы