📅  最后修改于: 2023-12-03 15:19:06.773000             🧑  作者: Mango
在Python中,我们经常会使用父类的方法或属性,同时在子类的构造方法中也需要初始化一些属性。这时,我们可以使用super().__init__(pos, model)
来调用父类的构造方法,从而实现代码的复用。
super()
是Python内置的一个函数,它返回一个代理对象,可以用来调用父类(超类)的方法。
super().__init__(pos, model)
可以在子类的构造方法中调用父类的构造方法,从而完成对父类属性的初始化。
下面是一个示例,我们用一个Vehicle
类作为父类,然后定义一个Car
类作为子类,可以看到在子类的构造方法中,我们通过super().__init__(pos, model)
进行了对父类属性pos
和model
的初始化。
class Vehicle:
def __init__(self, pos, model):
self.pos = pos
self.model = model
class Car(Vehicle):
def __init__(self, pos, model, color):
super().__init__(pos, model)
self.color = color
my_car = Car((0, 0), 'Toyota', 'blue')
print(my_car.pos) # (0, 0)
print(my_car.model) # Toyota
print(my_car.color) # blue
在上面的代码中,我们创建了一个Car
对象,这个对象具有pos
、model
和color
三个属性。其中,pos
和model
是从父类Vehicle
中继承下来的,而color
是子类特有的属性。
在子类中调用super().__init__(pos, model)
时,实际上是调用了父类的__init__(self, pos, model)
方法。因此,如果父类的构造方法发生变化,子类中的super().__init__(pos, model)
也需要做相应的调整。
在下面的代码中,我们对父类Vehicle
的构造方法进行了修改,将pos
和model
两个参数位置进行调换。在子类Car
中,我们需要修改调用super().__init__(pos, model)
时的参数位置。
class Vehicle:
def __init__(self, model, pos):
self.pos = pos
self.model = model
class Car(Vehicle):
def __init__(self, pos, model, color):
super().__init__(model, pos) # 修改调用super().__init__()的参数位置
self.color = color
my_car = Car((0, 0), 'Toyota', 'blue')
print(my_car.pos) # (0, 0)
print(my_car.model) # Toyota
print(my_car.color) # blue
从上面的代码可以看出,我们修改了父类的构造方法,但是通过super().__init__(pos, model)
仍然可以正确地初始化子类属性。
super()
是Python内置的一个函数,可以用来调用父类的方法。super().__init__(pos, model)
可以在子类的构造方法中调用父类的构造方法,从而完成对父类属性的初始化。super().__init__(pos, model)
时,实际上是调用了父类的__init__(self, pos, model)
方法。super().__init__(pos, model)
也需要做相应的调整。