2016-06-18 4 views
0

Я пытаюсь создать Person класса и наследовать его классу Student со следующими кодами. Когда я пытаюсь запуститьОшибка 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, idNumber, scores): 
     super(Student, self).__init__(firstName, lastName, idNumber) 
     self.scores = scores 
    def calculate(self): 
     if self.scores > 90: 
      print('Honor Student') 

И я,

s = Student('Sam', 'Smith', 123456, 95) 
s.calculate() 

Я предполагаю, что должен напечатать "Честь Студента однако бросает TypeError дает мне следующее сообщение TypeError: оно должно быть типа, не classobj сверху super. Что я делаю неправильно здесь. Я видел несколько сообщений с похожими проблемами, но не мог работать над собой.

+0

Можете ли вы опубликовать фактический след? – jordanm

+0

Traceback (последний звонок последний) 14, если self.scores> 90: 15 print ('Honor Student') ---> 16 s = Студент ('Сэм', 'Смит', 123456, 95) 17 s.calculate() в __init __ (self, firstName, lastName, idNumber, score) 9 класс Student (Person): 10 def __init __ (self, firstName, lastName, idNumber, score): ---> 11 super (Student, self) .__ init __ (firstName, lastName, idNumber) 12 self.scores = результаты 13 def calculate (self): ТипError: должен быть тип, а не classobj – user1430763

ответ

2

Использование super работает только для new-type classes.

Все, что вам нужно сделать, это иметь Person inherit from object в определении класса.

class Person(object): 
    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, idNumber, scores): 
     super(Student, self).__init__(firstName, lastName, idNumber) 
     self.scores = scores 

    def calculate(self): 
     if self.scores > 90: 
      print('Honor Student') 


Обратите внимание, что в Python 3 все классы нового типа, поэтому явное наследование от объекта не является необходимым.

Смежные вопросы