python继承
继承的基本使用
在现实生活中,继承一般指的是子女继承父辈的财产,父辈有的财产,子女能够直接使用。
程序里的继承
继承是面向对象软件设计中的一个概念,与多态、封装共为面向对象的三个基本特征。继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。
- 在程序中,继承描述的是多个类之间的所属关系。
- 如果一个类A里面的属性和方法可以复用,则可以通过继承的方式,传递到类B里。
- 那么类A就是基类,也叫做父类;类B就是派生类,也叫做子类。
-
123456789101112131415161718192021222324
class
Animal:
def
__int__(
self
):
pass
"""动物类"""
def
sleep(
self
):
print
(
'正在睡觉'
)
class
Dog(Animal):
"""Dog类继承自Animal类"""
def
__init__(
self
):
pass
class
Cat(Animal):
# 定义类时,在括号后面传入父类的类名,表示子类继承父类
"""Cat类继承自Animal类"""
def
__int__(
self
):
pass
# Dog 和 Cat 都继承自Animal类,可以直接使用Animal类里的sleep方法
dog
=
Dog()
dog.sleep()
cat
=
Cat()
cat.sleep()
在Python中,继承可以分为单继承、多继承和多层继承。
单继承:子类只继承一个父类
继承概念:子类用于父类的所有的方法和属性。
继承语法:
-
12
class
类名(父类名):
pass
- 子类继承自父类,可以享受父类中已经封装好的方法,不需要再次定义
- 子类中应该根据职责,封装子类特有的属性和方法。
-
继承的传递性
Dog类继承自Animal,XiaoTianQuan又继承自Dog类,那么XiaoTianQuan类就具有了Animal类里的所有属性和方法。
子类拥有父类以及父类的父类中封装的所有属性和方法。
思考:
XiaoTianQuan能否调用Animal的run()方法? XiaoTianQUan能够调用Cat里的方法?
多继承
子类可以拥有多个父类,并且具有所有父类的属性和方法
语法格式:
12class
子类名(父类名
1
,父类名
2.
..)
pass
- Python中针对类提供了一个内置属性
__mro__
可以用来查看方法的搜索顺序。 - MRO 是
method resolution order
的简称,主要用于在多继承时判断方法属性的调用顺序。 -
print(C.__mro__)
-
输出结果:
(<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
-
- 在调用方法时,按照
__mro__
的输出结果从左至右的顺序查找。 - 如果再当前类中找到方法,就直接执行,不再向下搜索。
- 如果没有找到,就顺序查找下一个类中是否有对应的方法,如果找到,就直接执行,不再继续向下搜索。
- 如果找到了最后一个类,依然没有找到方法,程序就会报错。
- 在调用方法时,按照
新式类和旧式(经典)类
object
是Python中所有对象的基类,提供了一些内置的属性和方法,可以时候用dir
函数查看。- 新式类:以
object
为基类的类,推荐使用 - 经典类:不以object为基类的类,不推荐使用
- 在 Python3.x 以后定义类时,如果没有指定父类,这个类会默认继承自 object,所以,python3.x版本定义的类都是新式类。
- 在Python2.x中定义类时,如果没有指定父类,则不会继承自object.
为了保证代码在Python2.x和Python3.x中都能够运行,在定义类时,如果一个类没有父类,建议统一继承自'object'
class 类名(object): pass
- Python中针对类提供了一个内置属性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix