子类在继承父类的时候,一般都会在初始化函数中调用父类的__init__函数,举个例子:
python
class Parent:
def __init__(self):
print("This is Parent class.")
class Child(Parent):
def __init__(self):
super().__init__()
print("This is Child class.")
c = Child()
那为什么会调用呢? 不调是否可以? 再看个例子
python
class Parent:
def __init__(self) -> str:
self.age = 18
def getAge(self):
return self.age
class Child(Parent):
def __init__(self) -> str:
self.name = "Child"
c = Child()
print(c.getAge())
执行后,会报错,信息如下:
python
Traceback (most recent call last):
File "h:\py_super.py", line 14, in <module>
print(c.getAge())
^^^^^^^^^^
File "h:\py_super.py", line 6, in getAge
return self.age
^^^^^^^^
AttributeError: 'Child' object has no attribute 'age'
原因:
- 子类在继承时,没有触发父类的初始化函数,导致对象属性age缺失。
因此,最好还是调用一下父类的__init__函数。
特别是当有很长的继承关系时,如D继承C,C继承B,B继承A,D类逐个调用多个父类的__init__函数太麻烦,而super()方法可以自动的找到父类的构造方法,并正确的传递参数。
补充知识点:
super函数返回一个代理对象,该对象可以访问父类的方法。