python继承父类的构造方法_[Python] 继承构造函数

最普通的继承

class Father():

def __init__(self):

print('Father')

class Son(Father):

def __init__(self):

print('Son')

super().__init__()

son = Son()

儿子实现了自己的构造函数_init_()的同时继承了爹的构造函数

实例化一个儿子的时候,在儿子的构造函数内,先执行自身的print,再执行爹的构造函数,所以——

Son

Father

当然了也可以反一反

class Son(Father):

def __init__(self):

super().__init__()

print('Son')

这样子就是父慈子孝了(雾

开始套娃

现在我有这样三个类

class GrandFather:

...

class Father(GrandFather):

...

class Son(Father):

...

出于某些原因,我希望在Son中去调用GrandFather的构造函数,而Father没有构造函数,换言之,架空爹,直接向太上皇汇报(有这样的儿子肯定往死里打……

实际上,super().__init__() 是缩写

真实的完整的写法是super(Son, self).__init__()

含义是调用Son的父类

所以如果我们把Son替换为Father,是否就可以调用Father 的父类,也就是GrandFather的构造函数了呢?

是的,可以

class GrandFather:

def __init__(self):

print('GrandFather')

class Father(GrandFather):

def __init__(self):

print('Father')

class Son(Father):

def __init__(self):

print('Son')

super(Son, self).__init__()

print('准备绕过爹')

super(Father, self).__init__()

son = Son()

如上的示例中,Son先调用了Father的构造函数,但Father并没有直接调用GrandFather的构造函数,而是被Son跳过了Father直接调用

Son

Father

准备绕过爹

GrandFather

我的某个程序中,有一个通用的抽象作为GrandFather,大部分模块都只到Father这一层,但又有少部分模块有一些共性,但是细节上不同,所以又派生出了Son这一层,于是我就找如何跳过Father这一层去调用GrandFather的构造函数

这些少部分的模块,Father的构造函数代码处理一些通用的数据逻辑,所以也就没有调用GrandFather的构造函数

嗯,大概率几个月后我就看不懂我写了啥了(大雾

一个小坑

在这个情况下,Father切记不能写成__Father

否则就会变成这样

Son

Father

准备绕过爹

Traceback (most recent call last):

File "d:/OneDrive/1_python_project/py_learn/class3.py", line 16, in

son = Son()

File "d:/OneDrive/1_python_project/py_learn/class3.py", line 14, in __init__

super(__Father, self).__init__()

NameError: name '_Son__Father' is not defined

看起来__Father没办法被进一步调用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值