📜  python 中的 super().__init__(pos, model)(1)

📅  最后修改于: 2023-12-03 15:19:06.773000             🧑  作者: Mango

Python中的 super().init(pos, model)

在Python中,我们经常会使用父类的方法或属性,同时在子类的构造方法中也需要初始化一些属性。这时,我们可以使用super().__init__(pos, model)来调用父类的构造方法,从而实现代码的复用。

什么是super()?

super()是Python内置的一个函数,它返回一个代理对象,可以用来调用父类(超类)的方法。

如何使用super().init(pos, model)?

super().__init__(pos, model)可以在子类的构造方法中调用父类的构造方法,从而完成对父类属性的初始化。

下面是一个示例,我们用一个Vehicle类作为父类,然后定义一个Car类作为子类,可以看到在子类的构造方法中,我们通过super().__init__(pos, model)进行了对父类属性posmodel的初始化。

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对象,这个对象具有posmodelcolor三个属性。其中,posmodel是从父类Vehicle中继承下来的,而color是子类特有的属性。

super().init(pos, model)与父类构造方法的关系

在子类中调用super().__init__(pos, model)时,实际上是调用了父类的__init__(self, pos, model)方法。因此,如果父类的构造方法发生变化,子类中的super().__init__(pos, model)也需要做相应的调整。

在下面的代码中,我们对父类Vehicle的构造方法进行了修改,将posmodel两个参数位置进行调换。在子类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)也需要做相应的调整。