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

python 中子类为什么要显示的调用父类的构造函数

python 中子类为什么要显示的调用父类的构造函数

哈士奇WWW 2019-03-30 09:31:24
解释器不自动调用么?
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

因为子类无法推断出该如何调用父类的构造函数,例如
classA():
def__init__(a,b):
pass
classB(A):
def__init__(c):
pass
观察一下C++的构造函数的处理情况,注意看第五条
如果子类没有定义构造方法,则调用父类的无参数的构造方法。
如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。
在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。
在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。
在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。
子类的构造函数,可能父类的参数个数、顺序都与不一致,所以也无法推测出应该如何调用父类的构造函数。
对于Python这种只能定义一个“构造函数”的语言来说,也不能保证像C++一样肯定有一个无参数构造函数,所以...只能手动调用了
                            
查看完整回答
反对 回复 2019-03-30
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

为了给父类的构造函数传参数,而不是默认调用父类的构造函数
(python调用父类函数的写法蛮丑的
                            
查看完整回答
反对 回复 2019-03-30
  • 2 回答
  • 0 关注
  • 273 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信