Python面向对象编程之继承与多态详解

Python面向对象编程之继承与多态详解

1. 继承

继承是面向对象编程中的一个重要概念,它允许子类继承父类的属性和方法。在 Python 中,我们可以通过以下方式来实现继承:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print(f"Hello, my name is {self.name} and I'm {self.age} years old.")

class Student(Person):
    def __init__(self, name, age, school):
        super().__init__(name, age)
        self.school = school

    def introduce(self):
        super().introduce()
        print(f"I'm a student of {self.school}.")

在上面的代码中,我们定义了一个父类 Person 和一个子类 Student。子类通过在类定义中将父类作为参数来继承父类,即:

class Student(Person):
    ...

在子类中,我们可以使用 super() 函数来调用父类的方法。在上面的代码中,我们通过 super().__init__(name, age) 的方式调用了父类的 __init__() 方法。另外,在子类中我们也可以重写父类的方法,这样就可以对父类方法进行扩展或修改。在上面的代码中,我们重写了父类的 introduce() 方法,同时调用了父类的 introduce() 方法。

2. 多态

多态是面向对象编程中的另一个重要概念,它允许不同类的对象使用相同的方法名称,但是具体执行的方法实现不同。在 Python 中,我们可以通过以下方式来实现多态:

class Animal:
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        print("Bark")

class Cat(Animal):
    def make_sound(self):
        print("Meow")

在上面的代码中,我们定义了一个父类 Animal 和两个子类 DogCat。它们都继承了 Animal 父类,并且都重写了父类的 make_sound() 方法。在使用过程中,我们可以根据具体的对象类型来调用相应的方法:

animals = [Dog(), Cat()]

for animal in animals:
    animal.make_sound()  # 根据具体的对象类型调用相应的方法

在上面的代码中,我们将两个不同的动物对象 Dog()Cat() 放在了列表 animals 中,并且通过 for in 循环遍历列表中的每个元素。在循环过程中,我们根据具体的对象类型来调用相应的 make_sound() 方法。在输出结果中,我们可以看到,针对不同的对象类型,执行的方法实现是不同的,这就是多态的体现。

3. 示例说明

示例一

假设我们现在有一个父类 Vehicle 和两个子类 CarBus,其中 CarBus 都继承了 Vehicle 父类,并且都重写了父类的 run() 方法。在 Car 子类中,我们还新增了一个 fly() 方法。下面是示例代码:

class Vehicle:
    def run(self):
        pass

class Car(Vehicle):
    def run(self):
        print("Car is running")

    def fly(self):
        print("Car is flying")

class Bus(Vehicle):
    def run(self):
        print("Bus is running")

如果我们现在需要编写一个函数,这个函数接受一个 Vehicle 类型的参数,并且调用这个参数的 run() 方法,我们该如何实现呢?

def test_vehicle(v: Vehicle):
    v.run()

上面这段代码就是一个示例。我们定义了一个函数 test_vehicle,这个函数接受一个类型为 Vehicle 的参数,并且调用参数的 run() 方法。

下面是测试代码:

car = Car()
bus = Bus()
vehicles = [car, bus]

for vehicle in vehicles:
    test_vehicle(vehicle)

在上面的代码中,我们创建了一个 Car 类的对象 car,一个 Bus 类的对象 bus,并且将它们放在一个列表 vehicles 中。然后我们通过 for in 循环遍历每个元素,并且将其作为参数传递给 test_vehicle() 函数进行测试。

输出结果如下:

Car is running
Bus is running

我们可以看到,在 test_vehicle 函数中,我们只调用了 Vehicle 类的 run() 方法,而具体执行的方法却是 Car 类和 Bus 类中的重写方法,这就是多态的体现。

示例二

假设我们现在有一个父类 Animal 和两个子类 DogCat,它们都继承了 Animal 父类,并且都重写了父类的 make_sound() 方法。下面是示例代码:

class Animal:
    def make_sound(self):
        pass

class Dog(Animal):
    def make_sound(self):
        print("Bark")

class Cat(Animal):
    def make_sound(self):
        print("Meow")

如果我们想让代码更加灵活,支持更多的动物种类。我们可以新增一个子类 Sheep,重写 make_sound() 方法。下面是示例代码:

class Sheep(Animal):
    def make_sound(self):
        print("Baa")

然后我们可以在测试代码中,向 animals 列表中新增一个 Sheep 实例对象,并且调用 test_animal() 函数进行测试。

dog = Dog()
cat = Cat()
sheep = Sheep()
animals = [dog, cat, sheep]

for animal in animals:
    test_animal(animal)

输出结果如下:

Bark
Meow
Baa

我们可以看到,新增一个子类 Sheep 并没有影响原有的代码,同时它也可以正常的使用多态。这就是面向对象编程中的继承与多态。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python面向对象编程之继承与多态详解 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • css实现垂直居中6种方法

    以下是详细讲解“CSS实现垂直居中6种方法”的完整攻略,过程中包含两个示例说明: CSS实现垂直居中6种方法 在Web开发中,垂直居中是一个常的需求。本攻略将介绍CSS实现垂直居中的6种方法,包括基本概念、使用方法和两个示例说明。 基本概念 在CSS中,垂直居中是指将一个元在垂直方向上居中对齐。实现垂直居中的方法有很多种,包括使用flex布局、使用table…

    other 2023年5月10日
    00
  • ASP常见错误详解及解决方案小结 推荐第1/2页

    下面我来为您详细讲解“ASP常见错误详解及解决方案小结 推荐第1/2页”的完整攻略。 1. 文章概述 该文介绍了 ASP 开发过程中常见的错误,并提供了相应的解决方案。主要包括以下几个方面: ASP 代码编写错误 IIS 服务器配置错误 数据库连接及操作错误 Windows 系统权限及组件问题 2. ASP代码编写错误 错误:VBScript 特殊符号错误 …

    other 2023年6月26日
    00
  • js实现自定义右键菜单

    下面我给你讲解一下js实现自定义右键菜单的完整攻略。 什么是自定义右键菜单 自定义右键菜单是指在浏览器中点击鼠标右键时弹出的自定义菜单,与浏览器提供的默认菜单不同,它可以根据需求自定义内容。 实现步骤 监听右键事件 首先,我们需要监听浏览器中的右键事件。在Javascript中,右键事件是contextmenu。我们可以通过下面的代码实现: window.a…

    other 2023年6月25日
    00
  • ios本地通知

    当然,我可以为您提供有关“iOS本地通知”的完整攻略,以下是详细说明: 什么是iOS本地通知? iOS本地通知是一种在iOS设备上发送通知的方式,它可以在应用程序未运行时向用户发送通知。本地通知可以用于提醒用户执行某些操作,如提醒用户完成任务、提醒用户查看新消息等。 iOS本地通知的实现步骤 以下是实现iOS本地通知的详细步骤: 导入UserNotifica…

    other 2023年5月7日
    00
  • VS2019 安装时闪退的解决方法

    当我们在安装Visual Studio 2019时,可能会遇到意外的闪退问题。这个问题可能会发生在安装的过程中或者是在Visual Studio 2019启动的时候。那么如何解决这个问题呢?下面就来详细讲解一下。 步骤一:查看错误日志 当我们遇到Visual Studio 2019安装、启动闪退时,第一步应该是查看错误日志。错误日志能够帮助我们确认闪退的具体…

    other 2023年6月27日
    00
  • JVM类加载机制详解

    JVM类加载机制详解 JVM类加载机制是Java虚拟机的核心功能之一,负责将Java类文件加载到内存中,并执行Java程序。在本篇攻略中,我们将深入了解JVM类加载机制的原理、加载过程以及类加载器的种类。 一、JVM类加载机制的原理 JVM类加载机制的基本原理是将以.class文件形式存储的Java字节码文件读取到内存中,并解析成JVM能够使用的数据结构,并…

    other 2023年6月25日
    00
  • 华为荣耀3X畅玩版开发者选项在哪里 如何设置

    下面我将为你详细讲解如何在华为荣耀3X畅玩版中开启开发者选项并进行设置。 1. 打开开发者选项 首先,要设置开发者选项,需要先打开开发者选项。具体操作步骤如下: 1.打开手机的设置菜单。 2.向下滑动,找到“关于手机”的选项,并点击进入。 在“关于手机”页面中,找到“版本号”选项,并连续点击七次,直到出现提示“开启了开发者选项”。 返回上一级,你会发现多出了…

    other 2023年6月26日
    00
  • Win10专业版用户电脑开机没几分钟自动重启的解决方法

    Win10专业版用户电脑开机没几分钟自动重启的解决方法 在使用Win10专业版的过程中,有时电脑开机后没几分钟就自动重启,给用户带来了很大的不便。此时我们可以通过以下方法进行解决。 方法一:关闭自动重启 首先,我们可以尝试关闭系统自动重启的功能。 打开开始菜单,点击“设置”图标。 在“设置”窗口中,点击“更新和安全”选项。 在“更新和安全”窗口中,点击“恢复…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部