2015-09-25 3 views
2

мне нужна помощь, у меня есть следующие классы в Python с наследованием и у меня есть ошибка:TypeError: __init __() занимает ровно 4 аргумента (1 дано)

class Human: 

    def __init__(self,name,surname,age): 
     self.name = name 
     self.surname = surname 
     self.age = age 

    def getName(self): 
     return self.name 

    def getSurname(self): 
     return self.surname 

    def setName(self, name): 
     self.name = name 

    def setSurname(self, surname): 
     self.surname = surname 

    def setAge(self, age): 
     self.age = age 

    def getAge(self): 
     return self.age 
    pass 

и:

from Human import Human 

class Student(Human): 

    def __init__(self,name,surname,age,file): 
     Human().__init__(self,name, surname, file) 
     self.file = file 

    def getFile(self): 
     return self.file 

    def setFile(self, file): 
     self.file = file 

    pass 

Когда я создаю экземпляр мне следующую ошибку

from Student import Student 
student1 = Student("Jhon", "Santana", "20", "111000") 

Ошибка:

Human().__init__(self, name, surname, age) 
TypeError: __init__() takes exactly 4 arguments (1 given) 

который является причиной этой ошибки? Спасибо ...

ответ

2

Dont ваш родитель создании экземпляра класса

def __init__(self,name,surname,age,file): 
    Human.__init__(self,name, surname, file) 

или даже лучше

super(Human,self).__init__(name,surname,age) 
3
Human().__init__(self,name, surname, age) 

то не как создать экземпляр вашего класса

вы должны сделать :

Human.__init__(self,name, surname, age) 

без() .otherwise вы пытаетесь создать экземпляр этого в Human()

1

Как подробным here, использование super является предпочтительным:

def __init__(self, name, surname, age, file): 
    super(Human, self).__init__(name, surname, age) 
    self.file = file 
+1

ааа вы избили мое редактирование: P (хороший ответ) –

2

Попробуйте это:

class Human: 

    def __init__(self,name,surname,age): 
     self.name = name 
     self.surname = surname 
     self.age = age 

    def getName(self): 
     return self.name 

    def getSurname(self): 
     return self.surname 

    def setName(self, name): 
     self.name = name 

    def setSurname(self, surname): 
     self.surname = surname 

    def setAge(self, age): 
     self.age = age 

    def getAge(self): 
     return self.age 


class Student(Human): 

    def __init__(self, name,surname,age,file): 
     super().__init__(name, surname, age) 
     self.file = file 

    def getFile(self): 
     return self.file 

    def setFile(self, file): 
     self.file = file 


student1 = Student("Jhon", "Santana", "20", "111000") 
input() 

Когда вы наследуете другой класс, но хотите перезаписать некоторые атрибуты, вам нужно добавить атрибуты родительского класса, которые вы хотите перезаписать в супер-конструкторе, так что атрибуты, переданные в класс ученика, могут быть переданы прямо в родительский класс.

Вы можете посмотреть мое видео на наследование по следующему адресу: https://www.youtube.com/watch?v=cqRtcmPGcic

+0

предполагая, что они используют PY3 да это будет работать большое –

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