我正在尝试从父类继承属性:
class Human:
def __init__(self,name,date_of_birth,gender,nationality):
self.name = name
self.date_of_birth = date_of_birth
self.gender = gender
self.nationality = nationality
给孩子班的学生:
class Student(Human):
def __init__(self,university,std_id,first_year_of_registration,study_program):
super(Student,self).__init__(name,date_of_birth,gender,nationality)
self.university = university
self.std_id = std_id
self.first_year_of_registration = first_year_of_registration
self.study_program = study_program
def select(c):
pass
def drop(c):
pass
def __str__(self):
return 'Student ID {self.std_id},and student name is {self.name} and his study program is {self.study_program}'.format(self=self)
所以我可以使用两个(父,学生)属性来创建对象,例如So:
s = Student('mark','2000-1-1','M','country','school',2017159,2017,'SE')
然后我可以:
print(s)
并像这样调用__str__函数:
Student ID 2017159,and student name is mark and his study program is SE
但是每当我创建对象时,它都会给我错误:
Traceback (most recent call last):
Python Shell, prompt 7, line 1
builtins.TypeError: __init__() takes 5 positional arguments but 9 were
given
我是python的新手。因此,我在互联网上搜索并尝试做一些继承示例,例如:
Human.__init__()
但没有任何效果,我在这里也检查了很多答案,但是都没有解决我的问题。希望任何人都可以帮助并指出这里出了什么问题。
def __init__(self,university,std_id,first_year_of_registration,study_program)
但是
Student('mark','2000-1-1','M','country','school',2017159,2017,'SE')
?
嗯,你知道,Python不是一个读书人。您需要告诉它您想要什么。
现在Python只需要university,std_id,first_year_of_registration,study_program
,仅此而已。
这意味着,您需要告诉它以获取其他元素:
class Student(Human):
def __init__(self,name,date_of_birth,gender,nationality, university,std_id,first_year_of_registration,study_program):
...
或通过说“并获得其他一些元素”。但要记住!这些其他元素必须在构造函数的末尾!
class Student(Human):
def __init__(self,university,std_id,first_year_of_registration,study_program, *args, **kwargs):
super(Student,self).__init__(*args, **kwargs)
...
它基本上捕获所有位置参数(args)和关键字参数(kwargs,并将它们进一步传递。
正如我说过的,它只从头开始接受参数,所以您需要这样做:
Student('school',2017159,2017,'SE', 'mark','2000-1-1','M','country')
解释器看到它的方式,它将采用第一个参数并将其放在university
中,然后将其放在std_id
中的第二个……直到study_program
,然后将其余的放入列表args
中。