我正在尝试从父类继承属性:
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__()
但是没有任何效果,我也在这里检查了很多答案,但是没有一个解决了我的问题。 希望任何人都可以提供帮助,并指出这里出了什么问题。
答案 0 :(得分:3)
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
。