2016-06-18 1 views
0

클래스 사용자를 만들고 다음 코드로 클래스 학생에게 상속하려고합니다. 내가수퍼 파이썬과의 파이썬 오류

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() 

내가 그것을 인쇄한다 가정하고, 수행 할 때 '명예 학생'그러나 그것은 나에게 다음과 같은 메시지 형식 오류를주는 형식 오류가 발생합니다 : classobj를 입력하지해야합니다 슈퍼에. 내가 여기서 잘못하고있는 것은 무엇인가. 비슷한 문제가있는 게시물을 거의 보지 못했지만 광산에서 일할 수 없습니다.

+0

실제 추적을 게시 할 수 있습니까? – jordanm

+0

추적 (가장 최근 통화 마지막) if self.scores> 90 : 15 인쇄 ('명예 학생') ---> 16 s = 학생 ('샘', '스미스', 123456, 95) 17 (self, firstName, lastName, idNumber, 점수) 9 학생 (사람) : 10 def __init __ (자기 이름, 성, idNumber, 점수) : ---> 11 슈퍼 (학생, 자기) .__ init __ (이름, 성, idNumber) 12 self.scores = 점수 13 def calculate (self) : TypeError : 형식이어야하며 classobj가 아니어야합니다. – user1430763

답변

2

super의 사용은 new-type classes에서만 작동합니다.

Person은 클래스 정의에서 object을 상속 받아야합니다. 파이썬 3에서 모든 클래스는 새로운 타입이기 때문에 개체에서 명시 적으로 상속이 필요하지 않다고

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') 


참고.

관련 문제