Python super()函数详解:语法、参数与多继承实战
本文深入解析Python内置函数super()的使用方法。详细阐述其在单继承与多继承场景下的区别,介绍super(type, object-or-type)的语法结构及参数含义。通过两个具体代码案例,演示如何利用super()解决子类属性缺失问题,并优化代码的可移植性与重用性,帮助开发者掌握面向对象编程中的关键技巧。
一、super函数简介
Python内置的super()函数主要应用于类的多继承场景,用于定位并调用父类的方法。虽然在单重继承中不使用super()也能正常运行,但遵循使用super()是一种良好的编程习惯。通常,当子类需要调用父类的方法时,就会使用这种方式。
二、super函数语法
super(type, object-or-type)
参数说明如下:
type — 指定类,通常传入类名;
object-or-type — 指定实例或类,通常传入self;
返回值: 无
三、super函数使用
1.案例一:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
@File:python_super.py
@Time:2019/12/29 21:25
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
class A:
def m(self):
print('A')
class B:
def m(self):
print('B')
class C(A):
def m(self):
print('C')
super().m()
C().m()
输出结果:
C
A
代码分析:
这种做法的优势在于:若需更改子类继承的父类(例如从A改为B),只需修改一行代码(将class C(A):改为class C(B))即可,无需在class C的大量代码中逐一查找并修改基类名。此外,这也提高了代码的可移植性和重用性。
2.案例二:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
@File:python_super.py
@Time:2019/12/29 21:25
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
class Dog:
def __init__(self):
self.fly = False
def print_fly(self):
if self.fly:
print('不是普通狗,能飞')
else:
print('普用狗不会飞')
class xiaotianquan(Dog):
def __init__(self):
self.sound = True
def print_sing(self):
if self.sound:
print("汪汪汪")
else:
print("假狗狗")
if __name__ == '__main__':
dog = xiaotianquan()
dog.print_sing() # 能正常输出
dog.print_fly() # 报错,AttributeError: 'xiaotianquan' object has no attribute 'fly'
代码分析:
尽管子类xiaotianquan继承了父类Dog,但子类直接调用父类的print_fly函数仍会报错,原因是子类实例没有父类的fly属性。上述代码可以通过在__init__函数中调用super()来解决,例如:
class Dog:
def __init__(self):
self.fly = False
def print_fly(self):
if self.fly:
print('不是普通狗,能飞')
else:
print('普用狗不会飞')
class xiaotianquan(Dog):
def __init__(self):
super().__init__() # 等效 super(xiaotianquan,self).__init__()
self.fly = True
self.sound = True
def print_sing(self):
if self.sound:
print("汪汪汪")
else:
print("假狗狗")
if __name__ == '__main__':
dog = xiaotianquan()
dog.print_sing()
dog.print_fly()
输出结果:
汪汪汪
不是普通狗,能飞
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









