首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

软件测试笔记|Python编程基础|面向对象:继承

“动动小手,点点关注呗~”

我曾经满身伤痕,我曾经漂泊四方。这不是我的苍凉,这是我的勋章。当有一天有人问起我的过去,我会骄傲,不为那些已结痂的伤疤,只为那时候,我曾那么那么用力地追逐我的梦想。

在Python的面向对象编程中,继承是一个核心概念,它允许我们基于现有的类创建新类,新类可以复用现有类的属性和方法,同时还能扩展或修改这些属性和方法。通过继承,我们可以极大地提高代码的复用性和可维护性,构建出层次分明、结构清晰的软件系统。接下来,我们将深入探讨Python中继承的各种细节和高级应用。

一、继承的基本概念与语法

继承的核心思想是创建一个新类(称为子类或派生类),它继承自一个已有的类(称为父类或基类)。子类会自动拥有父类的所有属性和方法,并且可以添加自己独有的属性和方法。

在Python中,定义子类的语法如下:

在上述代码中:

1. 首先定义了ParentClass,它有一个构造函数__init__用于初始化attr1属性,还有一个方法parent_method用于展示属性值。

2. 然后定义了ChildClass,它继承自ParentClass,在括号中指定父类名称。

3. ChildClass的构造函数中,使用super().__init__(attr1)调用父类的构造函数来初始化从父类继承的属性attr1,同时添加了自己的属性attr2。

4. ChildClass还定义了一个独有的方法child_method。

我们可以通过以下方式实例化并调用这些类和方法:

运行结果如下:

从结果可以看出,子类ChildClass不仅可以调用自己定义的方法child_method,还可以调用从父类继承的方法parent_method。

二、方法重写(Method Overriding)

在子类中,如果定义了一个与父类同名的方法,这就叫做方法重写。当调用该方法时,子类中重写后的方法会覆盖父类的方法。

运行结果:

在上述代码中,ChildClass重写了ParentClass中的say_hello方法,当调用child_obj.say_hello()时,执行的是子类中重写后的方法。

调用父类被重写的方法

有时候,在子类重写的方法中,我们仍然希望调用父类的同名方法,可以使用super()函数。

运行结果:

通过super().say_hello(),我们在子类重写的方法中调用了父类的say_hello方法,并在此基础上进行了扩展。

三、多重继承

Python支持多重继承,即一个子类可以同时继承多个父类。子类会继承所有父类的属性和方法。

运行结果:

ClassC同时继承了ClassA和ClassB,因此它可以调用这两个父类中的方法以及自己定义的方法。

方法解析顺序(MRO)

在多重继承中,当多个父类存在同名方法时,Python通过**方法解析顺序(MRO)**来确定调用哪个方法。可以通过类的__mro__属性查看MRO。

运行结果(不同Python版本可能略有差异):

这表示在ClassC中查找方法时,会先在ClassC自身查找,然后按照顺序依次在ClassA、ClassB、object中查找。

四、抽象基类与继承

在Python中,可以使用abc模块创建抽象基类(ABC),抽象基类定义了一组方法签名,但不提供具体的实现,子类必须实现这些抽象方法。

运行结果:

在上述代码中,Shape是一个抽象基类,它定义了抽象方法area。Rectangle和Circle作为子类,必须实现area方法,否则会抛出TypeError。

五、继承的高级应用与注意事项

1. 私有属性与继承:Python中没有严格意义上的私有属性,但通过命名约定(如_attr表示受保护属性,__attr表示“私有”属性),在继承时需要注意,子类不能直接访问父类的__attr属性,但可以通过特殊的方式(如_ClassName__attr)间接访问。

2. 继承与多态:继承是实现多态的基础,通过继承和方法重写,不同的子类对象可以对同一方法做出不同的响应,从而实现多态性。

3. 避免过度继承:虽然继承可以提高代码复用性,但过度使用多重继承可能导致代码变得复杂和难以维护,需要谨慎使用。

通过以上对Python中继承的深入探讨,相信你已经对这一重要的面向对象编程概念有了全面的理解。合理运用继承,能够帮助我们编写出更加高效、优雅和可维护的Python代码。

“动动小手,点点关注呗~”🫰

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OJ31QVEIOCfhh0-PyklZ2JMg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券