2016-06-18 5 views
0

私はクラスPersonを作成しようとしていて、クラスStudentに次のコードで継承しています。 classobjない、型である必要があります:私はPythonエラーsuper

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印刷する必要がありますと仮定しました。スーパーで。私はここで間違って何をしていますか?私は、同様の問題でいくつかの記事を見たが、私の仕事に取り組むことはできません。

+0

実際のトレースバックを投稿できますか? – jordanm

+0

トレースバック(直近の最後のコール) if self.scores> 90: 15 print( 'Honour Student') ---> 16 s =学生( 'Sam'、 'Smith'、123456,95) 17 (self、firstName、lastName、idNumber、得点) 9クラス学生(Person): 10 def __init __(自己、名字、ID番号、得点): ---> 11 super (自己): TypeError:型で、classobjではありません。 – user1430763

答えて

2

superの使用は、new-type classesの場合にのみ機能します。

Personをクラス定義の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内のすべてのクラスは、新しい型であるため、対象からの明示的な継承が必要ではないことに注意してください。

関連する問題