为了账号安全,请及时绑定邮箱和手机立即绑定

5-2继承的问题

有2个关于继承的问题,烦请各位大神帮忙解答,谢谢!

  1. 父类所有非私有属性子类都必须继承吗?

  2. 请看以下代码,我想让子类继承name 和age属性,父类私有的gender无法继承,但为何程序报错?


  3. class Person(object):
        def __init__(self, gender, name, age):
            self.name = name
            self.age = age
            self.__gender = gender        
        pass
    
    class Teacher(Person):
        def __init__(self, name, age, course):
            super(Teacher, self).__init__(name, age)
            self.course = course
        pass
    
    t = Teacher('Alice', 24, 'English')
    print t.name
    print t.course

正在回答

3 回答

我理解,简单的说就是,老爹有的儿子必须有,儿子有的老爹可以没有

0 回复 有任何疑惑可以回复我~

个人理解:

首先来看下super:super(Teacher,self).__init__(arguments)这里的arguments是要和父类里面的参数一致的,多了或者是少了都会报错,所以这里就应该是gender,name,age;gender为私有属性,参数要传,但其实是没有继承给子类,即super(Teacher,self).__init__(gender,name,age)。这样看来父类的所有非私有属性子类都继承的

所以对于第二个问题,super里你仍然要传入gender参数,且子类的__init__参数里也要有gender

class Person(object):
    def __init__(self, gender, name, age):
        self.name = name
        self.age = age
        self.__gender = gender        
    pass
 
class Teacher(Person):
    def __init__(self, gender,name, age, course):
        super(Teacher, self).__init__(gender,name, age)
        self.course = course
    pass
 
t = Teacher('Female','Alice', 24, 'English')
print t.name
print t.course


0 回复 有任何疑惑可以回复我~
#1

925755208

经过测试这位答主说的有道理,子类的实例要要全部继承父类的实例属性,但我们在外部访问时是无法访问到父类的实例的私有属性的
2018-09-20 回复 有任何疑惑可以回复我~
super(Teacher,self).__init__(name,age,course)

具体不太懂,但是应该是这里少了个参数course

0 回复 有任何疑惑可以回复我~
#1

SimmyZhong 提问者

我的想法是让Teacher继承Person的name和age属性,应该不用加course吧?
2017-04-21 回复 有任何疑惑可以回复我~
#2

unsolvedmys 回复 SimmyZhong 提问者

查看super的意思,当写super(Teacher ,self)时,self必须是Teacher的对象,因此它需要有3个参数,name,age,和course;所以super(Teacher,self).__init__(...)初始化它需要三个参数。
2017-04-21 回复 有任何疑惑可以回复我~
#3

unsolvedmys 回复 SimmyZhong 提问者

你把gender变成内部属性,它的子类自然是没有继承它,就是继承了name和age.
2017-04-21 回复 有任何疑惑可以回复我~
#4

qq_赞赞赞_0 回复 SimmyZhong 提问者

子类继承父类所有的功能,所以私有属性也会继承,只是不能从外部访问私有属性,在父类中定义一个实例方法,就可以从外部访问从父类继承的私有属性了
2017-06-25 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

5-2继承的问题

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号