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

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

解释器不自动调用么?


因为子类无法推断出该如何调用父类的构造函数,例如

class A():
  def __init__(a, b):
    pass

class B(A):
  def __init__(c):
    pass

观察一下C++的构造函数的处理情况,注意看第五条

  1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。
  2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。
  3. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数,则会调用父类的默认无参构造函数。
  4. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类自己提供了无参构造函数,则会调用父类自己的无参构造函数。
  5. 在创建子类对象时候,如果子类的构造函数没有显示调用父类的构造函数且父类只定义了自己的有参构造函数,则会出错(如果父类只有有参数的构造方法,则子类必须显示调用此带参构造方法)。

子类的构造函数,可能父类的参数个数、顺序都与不一致,所以也无法推测出应该如何调用父类的构造函数。
对于Python这种只能定义一个“构造函数”的语言来说,也不能保证像C++一样 肯定有一个无参数构造函数,所以...只能手动调用了


为了给父类的构造函数传参数,而不是默认调用父类的构造函数

( python调用父类函数的写法蛮丑的

【热门文章】
【热门文章】