子类是否需要初始化一个空的超类?

时间:2019-02-27 18:15:05

标签: python python-3.x

这才浮现在脑海。

class Parent:
    pass

class Child(Parent):
    def __init__(self):
        # is this necessary?
        super().__init__()

当一个类继承一个空类时,子类需要初始化它吗?为什么?

3 个答案:

答案 0 :(得分:4)

这很好:

class Parent:
    # the __init__ is inherited from parent
    pass

class Child(Parent):
    # the __init__ is inherited from parent
    pass

这也很好:

class Parent:
    # the __init__ is inherited from parent
    pass

class Child(Parent):
    def __init__(self):
        # __init__ is called on parent
        super().__init__()

这似乎没问题,通常可以正常工作,但并非总是如此:

class Parent:
    # the __init__ is inherited from parent
    pass

class Child(Parent):
    def __init__(self):
        # this does not call parent's __init__, 
        pass

这是一个出错的例子:

class Parent2:
    def __init__(self):
        super().__init__()
        print('Parent2 initialized')


class Child2(Child, Parent2):
    pass

# you'd expect this to call Parent2.__init__, but it won't:
Child2()

这是因为Child2的MRO为:Child2-> Child-> Parent-> Parent2-> object。

Child2.__init__继承自Child,并且由于缺少对Parent2.__init__的调用而没有调用super().__init__

答案 1 :(得分:2)

否,没有必要。当您希望父母的逻辑也要运行时,这是必要的。

DataGridViewTextBoxColumn

答案 2 :(得分:1)

语言没有要求子类需要调用超类的<ul class="container"> <li class="box">1</li> <li class="box">2</li> <li class="box">3</li> <li class="box">4</li> <li class="box">5</li> <li class="box">6</li> </ul>。尽管如此,它几乎总是需要的,因为超类会初始化一些基本属性,而子类希望将其初始化。因此,如果超类__init__为空,则无需调用它,否则需要。

相关问题