Python3中子类没有显式调用父类的__init__方法会如何?
看了很多材料都提到子类应该要显式地调用父类的__init__方法,
但是如果子类有__init__方法,且并未显式调用父类的__init__方法也不会报错啊,所以是否可以不必显式调用呢?
Python3中子类没有显式调用父类的__init__方法会如何?
4 回复
这样父类成员就不会初始化,调用会直接报错
如果子类没有显式调用父类的 __init__ 方法,那么父类的初始化代码就不会执行。这通常意味着父类中定义的实例属性不会被设置,可能会导致子类实例缺少必要的属性或状态,从而引发 AttributeError 或其他意外行为。
举个例子:
class Parent:
def __init__(self):
self.value = 42
print("Parent __init__ called")
class Child(Parent):
def __init__(self):
# 没有调用 super().__init__()
print("Child __init__ called")
c = Child()
print(c.value) # 这里会抛出 AttributeError: 'Child' object has no attribute 'value'
要修复这个问题,你需要在子类的 __init__ 方法中显式调用 super().__init__():
class Child(Parent):
def __init__(self):
super().__init__() # 正确调用父类初始化
print("Child __init__ called")
c = Child()
print(c.value) # 现在可以正常输出 42
简单说就是:记得用 super().__init__() 来确保父类正确初始化。
如何父类有多个子类,有一个子类显式调用了父类的__init__方法,但是其余子类并没有,这样会导致什么问题?
假如父类在__init__的方法创建成员变量 A, 子类如果调用了父类的__init__方法那么子类的实例就有成员变量 A,如果子类没有调用,那么该子类的实例就没有这个成员变量。 如果其他方法要使用这个成员变量 A, 那么自然就要报错。

