gpt4 book ai didi

python - 如何将父类的 __init__ 属性继承到子类中的 __init__ ?

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:22 29 4
gpt4 key购买 nike

我正在尝试从父类继承属性:

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)

所以我可以使用两个( parent ,学生)属性创建一个对象,例如:

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

关于python - 如何将父类的 __init__ 属性继承到子类中的 __init__ ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58378239/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com