Python中super()函数简介及用法分享
简介
在Python中,如果需要在子类中调用父类的方法或属性,可以使用super()
函数。super()
函数返回父类实例的对象,通过它可以调用父类的方法和属性。
super()
函数有两个参数,第一个参数是子类类型,第二个参数是对象(self),可以省略。
用法
下面是super()
函数的一些常用用法:
1. 调用父类方法
我们可以通过super()
函数调用父类的方法。假设有如下代码:
class Parent:
def __init__(self):
self.name = "Parent"
def print_name(self):
print(self.name)
class Child(Parent):
def __init__(self):
super().__init__()
self.name = "Child"
child = Child()
child.print_name()
程序输出:
Child
可以看到,Child
类中的__init__
方法通过super().__init__()
调用了父类Parent
的__init__
方法,保证了父类的初始化逻辑仍然可以在子类中执行。
2. 多继承时解决方法重名问题
在多继承的情况下,如果两个父类有相同的方法名,子类调用该方法时会调用哪个父类的方法呢?
这时候可以通过super()
函数来解决。假设有如下代码:
class Parent1:
def print_name(self):
print("Parent1")
class Parent2:
def print_name(self):
print("Parent2")
class Child(Parent1, Parent2):
def print_name(self):
super(Parent1, self).print_name()
super(Parent2, self).print_name()
child = Child()
child.print_name()
程序输出:
Parent2
Parent1
可以看到,Child
类中的print_name
方法通过super()
函数调用了Parent2
和Parent1
类的print_name
方法,保证了多继承中父类方法的调用顺序。
示例说明
下面再举两个具体的使用super()
函数的示例说明。
示例1:在子类中扩展父类方法
假设有如下代码:
class Parent:
def __init__(self):
self.name = "Parent"
def print_name(self):
print(self.name)
class Child(Parent):
def __init__(self):
super().__init__()
self.name = "Child"
def print_info(self):
super().print_name()
print("info:", self.name)
child = Child()
child.print_info()
程序输出:
Parent
info: Child
可以看到,Child
类中的print_info
方法通过super().print_name()
调用了父类Parent
的print_name
方法,在此基础上实现了自己的逻辑。
示例2:解决菱形继承问题
假设有如下代码:
class GrandParent:
def print_name(self):
print("GrandParent")
class Parent1(GrandParent):
pass
class Parent2(GrandParent):
pass
class Child(Parent1, Parent2):
def print_name(self):
super().print_name()
child = Child()
child.print_name()
程序输出:
GrandParent
可以看到,Child
类中的print_name
方法通过super()
函数调用了Parent1
和Parent2
的共同父类GrandParent
的print_name
方法,解决了菱形继承中方法调用的歧义。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中super()函数简介及用法分享 - Python技术站