请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么子类的构造函数中需要传入父类的参数

我的理解是在 class Student(Human) 中就已经继承了 Human 类中的构造函数了(因为可以传入参数并且打印出来),为什么还要在 Student 子类的构造函数中再写一次呢?https://img1.sycdn.imooc.com/szimg/59dcc5bf00010f1103850127.jpg

正在回答

2回答

你在代码中确实继承了父类, 你传入参数可以打印出来,但是这没有意义呀。 你想新用的子类肯定要有自己的更多的特性,所以你很可能就要再传入更多的参数 来实现子类更多的功能。 就像上图中的东西 ,人类定义学校的参数是不合理的,你在继承了人类的学生类中有学校这个定义更加合理, 所以在子类的函数构造中要有新的构造函数来传入这个参数,当然有了新的构造函数以后 原来的父类的构造函数就没有办法调用了 所以在子类的构造方法中再次调用父类构造函数。

1 回复 有任何疑惑可以回复我~
  • 提问者 德瑞德 #1
    哦哦!有新的构造函数以后,父类构造函数就没法调用了!明白了!非常感谢!
    回复 有任何疑惑可以回复我~ 2017-10-12 08:20:29
  • 提问者 德瑞德 #2
    非常感谢!
    回复 有任何疑惑可以回复我~ 2017-10-12 08:21:30
7七月 2017-10-10 23:47:47

因为可以传入参数并且打印出来,这点可以具体说明下吗。我觉得你是在用其他语言的编程想再考虑这个问题。

0 回复 有任何疑惑可以回复我~
  • 提问者 德瑞德 #1
    一开始定义了父类:
    
    class Human():
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    然后在子类里面继承:
    
    from xx import Human
    class Student(Human):
    
    
    我可能先前表述不太准确,我的想法是在实例化 Student 的时候,已经可以通过给 name 和 age 两个参数赋值来访问这些参数了:
    
    student1 = Student('石敢当', 18)
    print(student1.name)
    print(student1.age)
    
    
    后面在定义 Student 的时候,依旧在 Student 的构造函数中除了定义新参数 school 以外,又调用了父类已经定义了的 name 和 age 变量:
    
        def __init__(self, school, name, age):
            self.school = school
            super(Student, self).__init__(name, age)
    
    
    所以我的疑问是在先前还没有编写 Student 构造函数的时候,已经可以在实例化 Student 时访问这些参数了,为什么还要再调用一次?
    回复 有任何疑惑可以回复我~ 2017-10-12 08:15:53
  • 提问者 德瑞德 #2
    我明明打了回车的orz,都被吃掉了
    回复 有任何疑惑可以回复我~ 2017-10-12 08:17:46
  • 提问者 德瑞德 #3
    chipinzhen 同学的答案解决了我的问题~有新的构造函数以后,父类构造函数就没法调用了!感谢老师回复
    回复 有任何疑惑可以回复我~ 2017-10-12 08:21:18
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信