検索

ホームページ  >  に質問  >  本文

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

解释器不自动调用么?

迷茫迷茫2824日前838

全員に返信(2)返信します

  • 天蓬老师

    天蓬老师2017-04-17 13:18:46

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

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

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

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

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

    返事
    0
  • 阿神

    阿神2017-04-17 13:18:46

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

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

    返事
    0
  • キャンセル返事