当子类继承自父类时,可以通过调用父类的构造函数来初始化子类实例中的父类属性。
在Python中,可以使用super()
函数来调用父类的构造函数。
下面是具体的步骤和示例说明:
1. 子类继承父类
首先,定义一个父类和一个子类:
class Person:
def __init__(self, name):
self.name = name
def say_hello(self):
print("Hello, my name is ", self.name)
class Student(Person):
pass
此时,Student
类继承了Person
类。但是,Student
类没有自己的构造函数,所以它会继承Person
类的构造函数。
2. 子类调用父类的构造函数
为了初始化Student
类实例中的name
属性,我们需要调用Person
类的构造函数。为此,我们可以在Student
类的构造函数中使用super()
函数来完成:
class Student(Person):
def __init__(self, name, grade):
super().__init__(name)
self.grade = grade
在这个例子中,super().__init__(name)
调用了父类Person
的构造函数,并将参数name
传递给它以初始化Student
类实例中的name
属性。
示例说明1
继续上面的例子,现在我们创建一个Student
类实例并调用它的方法:
s = Student("Tom", "1st grade")
s.say_hello()
运行结果:
Hello, my name is Tom
在这个例子中,我们通过子类Student
的构造函数,成功地调用了父类Person
的构造函数,并初始化了Student
类实例中的name
属性。
示例说明2
接下来,我们看一下多重继承情况下如何使用super()
调用父类的构造函数。
class A:
def __init__(self):
self.name = "A"
class B(A):
def __init__(self):
super().__init__()
class C(A):
def __init__(self):
super().__init__()
class D(B, C):
def __init__(self):
super().__init__()
在这个例子中,D
类继承了B
和C
类,B
和C
类都继承了A
类。因此,当我们创建D
类实例时,它需要调用B
类和C
类的构造函数,并间接调用A
类的构造函数。
D
类的构造函数中只需要调用super()
一次,就可以完成初始化过程。Python会自动按照继承顺序,依次调用B
和C
类的构造函数,并最后调用A
类的构造函数。
下面是一个测试示例:
d = D()
print(d.name)
运行结果:
A
在这个示例中,我们首先创建类D
的实例,并打印name
属性的值,由于多重继承的调用顺序是从左到右,所以D
类实例中的name
属性值来自于B
类的构造函数,而B
类的构造函数又来自于它的父类A
的构造函数。因此,输出的结果是A
。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 子类调用父类的构造函数实例 - Python技术站