这才浮现在脑海。
class Parent:
pass
class Child(Parent):
def __init__(self):
# is this necessary?
super().__init__()
当一个类继承一个空类时,子类需要初始化它吗?为什么?
答案 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__
为空,则无需调用它,否则需要。