Python面向对象编程:继承与组合的实战应用解析

Noah
Noah
发布时间:2026-10-13 | 6人浏览过
原创

本文深入解析Python面向对象编程中继承与组合两种核心机制。通过圆环计算示例演示组合用法,以类层级结构说明继承原理,涵盖单继承、多继承、抽象概念及方法重写技巧。详细讲解如何利用super()和类名调用父类方法,帮助开发者掌握代码重用与类关系设计的最佳实践。

本文通过具体实例详细解析Python面向对象编程中继承与组合的应用方法,旨在为读者提供清晰的参考指南。

面向对象的组合用法

在软件工程中,除了继承之外,实现代码重用的另一种重要手段是组合。

组合的定义在于:在一个类内部,将另一个类的实例作为数据属性进行存储,这种设计模式被称为类的组合。

以圆环为例,其结构由两个同心圆构成。圆环的面积等于外圆面积减去内圆面积,而圆环的周长则是外圆周长与内圆周长之和。

基于上述逻辑,我们首先定义一个计算圆形周长和面积的圆形类,随后在环形类中通过组合圆形类的实例作为自身属性来实现功能。

# -*-coding:utf-8 -*-
#! python3
from math import pi
class Circle:
  '''
  定义了一个圆形类;
  提供计算面积(area)和周长(perimeter)的方法
  '''
  def __init__(self,radius):
    self.radius = radius
  def area(self):
    return pi * self.radius * self.radius
  def perimeter(self):
    return 2 * pi *self.radius
circle = Circle(10) #实例化一个圆
area1 = circle.area() #计算圆面积
per1 = circle.perimeter() #计算圆周长
print(area1,per1) #打印圆面积和周长
class Ring:
  '''
  定义了一个圆环类
  提供圆环的面积和周长的方法
  '''
  def __init__(self,radius_outside,radius_inside):
    self.outsid_circle = Circle(radius_outside)
    self.inside_circle = Circle(radius_inside)
  def area(self):
    return self.outsid_circle.area() - self.inside_circle.area()
  def perimeter(self):
    return self.outsid_circle.perimeter() + self.inside_circle.perimeter()
ring = Ring(10,5) #实例化一个环形
print(ring.perimeter()) #计算环形的周长
print(ring.area()) #计算环形的面积

运行结果如下所示:

314.1592653589793 62.83185307179586 94.24777960769379 235.61944901923448

继承

继承是创建新类的一种机制。在Python中,新建的类可以继承一个或多个父类(也称为基类或超类),而新建的类则被称为派生类或子类。

Python中的类继承主要分为单继承和多继承两种形式。

查看继承关系

>>> SubClass1.__bases__ #__base__只查看从左到右继承的第一个子类,__bases__则是查看所有继承的父类
(<class '__main__.ParentClass1'>,)
>>> SubClass2.__bases__
(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

注意:若未显式指定基类,Python类默认继承object类。object是所有Python类的基类,它提供了如__str__等常见方法的实现。

>>> ParentClass1.__bases__
(<class 'object'>,)
>>> ParentClass2.__bases__
(<class 'object'>,)

继承与抽象(先抽象再继承)

抽象是指抽取事物相似或相近的部分。

抽象过程分为两个层次:

1. 将奥巴马和梅西这两个对象中相似的部分提取并封装为类;

2. 将人、猪、狗这三个类中相似的部分提取并封装为父类。

抽象的核心作用在于划分类别,从而隔离关注点并降低系统复杂度。

继承是基于抽象结果的具体实现。编程语言通过继承来表达抽象结构,因此必须先经过抽象过程,才能通过继承方式展现抽象形态。

抽象仅是分析与设计过程中的一个动作或技巧,通过抽象可以生成类。

继承与重用性

在程序开发中,若已定义类A,现需新建类B,且类B的大部分功能与类A相同。

此时无需从头编写类B,而是利用类的继承概念来解决。

通过让类B继承类A,B将“遗传”A的所有属性(包括数据属性和函数属性),从而实现代码重用。

派生

子类可以添加新属性或在自身范围内重新定义属性(这不会影响父类)。需注意,一旦重新定义了与父类同名的属性,调用时将优先使用子类的定义。

在子类中,若新建的重名函数需要重用父类中同名函数的功能,应采用普通函数调用方式,即:类名.func()。此时调用方式与普通函数无异,因此即使涉及self参数,也需显式传值。

在Python 3中,子类执行父类方法也可直接使用super方法。

# -*-coding:utf-8 -*-
#! python3
class A:
  def hahaha(self):
    print('A')
class B(A):
  def hahaha(self):
    super().hahaha()
    #super(B,self).hahaha()
    #A.hahaha(self)
    print('B')
a = A()
b = B()
b.hahaha()
super(B,b).hahaha()

运行结果如下:

A B A

通过继承建立了派生类与基类之间的“是”关系,例如白马是马,人是动物。

当多个类具有大量相同功能时,将这些共同功能提取为基类并使用继承是较好的选择,例如教授是老师。

对Python相关内容感兴趣的读者可参考本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》。

希望本文所述内容能对大家的Python程序设计学习有所帮助。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表