一、super函数的基本用法
在Python中,每一个类都有一个父类,通过继承机制,子类可以使用父类的属性和方法。当子类与父类的方法名字相同时,我们需要调用父类的方法时,就需要使用super函数。
class Parent(object):
def some_method(self):
print("父类方法执行")
class Child(Parent):
def some_method(self):
super().some_method() # 调用父类方法
print("子类方法执行")
Child().some_method() # 执行子类方法
在上面的代码中,我们定义了一个父类和一个子类,子类继承自父类。在子类的some_method方法中,通过super()可以调用到父类的some_method方法。输出结果为:
父类方法执行
子类方法执行
可以看到,在子类的some_method方法中,调用了父类的some_method方法,而且输出结果是先执行父类方法再执行子类方法。
二、super函数的多重继承场景
在Python中,支持多重继承。即一个子类可以同时继承多个类。如:
class A(object):
def some_method(self):
print("A类方法执行")
class B(object):
def some_method(self):
print("B类方法执行")
class Child(A, B):
def some_method(self):
super(Child, self).some_method()
print("子类方法执行")
Child().some_method()
在上面的代码中,我们定义了三个类,子类继承自A和B类。在子类的some_method方法中,我们使用了super函数调用了A类的方法。输出结果为:
A类方法执行
子类方法执行
可以看到,通过super函数可以很方便地实现多重继承中父类方法的调用。
三、super函数与__init__方法的结合使用
在Python中,__init__方法常常被用来初始化对象的属性。在子类中重写__init__方法时,如果要使用父类的初始化方法,就需要使用super函数。如:
class Parent(object):
def __init__(self, name):
self.name = name
class Child(Parent):
def __init__(self, name, age):
super(Child, self).__init__(name)
self.age = age
c = Child("Tom", 10)
print(c.name, c.age)
在上面的代码中,我们定义了一个父类和一个子类,子类在重写__init__方法时,使用了super函数调用了父类的__init__方法。输出结果为:
Tom 10
可以看到,通过super函数,子类很容易地调用到了父类的初始化方法,实现了属性的继承。
四、super函数与多重继承中的方法替换
在多重继承中,有时候我们需要替换某个父类的方法。这时候,我们可以使用super函数来实现。
class A(object):
def some_method(self):
print("A类方法执行")
class B(object):
def some_method(self):
print("B类方法执行")
class Child(A, B):
def some_method(self):
super(B, self).some_method()
print("子类方法执行")
Child().some_method()
在上面的代码中,子类继承自A和B类,而且重写了some_method方法。
在使用super函数的时候,我们可以指定要调用哪个父类的方法。在这个例子中,我们指定调用B类的some_method方法。
输出结果为:
B类方法执行
子类方法执行
可以看到,通过super函数,我们成功地用子类的方法替换了B类的方法,实现了方法的动态替换。
五、总结
在Python中,super函数是一个很实用的函数,它可以很方便地实现多重继承中父类方法的调用和替换。同时,它还可以用来调用父类的初始化方法,实现属性的继承。
大家在使用super函数的时候,需要注意指定要调用哪个父类的方法,同时要避免出现死循环的情况。