Python类的继承与多态详细介绍

yizhihongxing

Python是一门面向对象的编程语言,类的继承和多态是面向对象编程的两个重要特性。在Python中,类的继承可以让一个类“继承”另一个类的属性和方法,而多态则让不同的子类对象可以调用相同的父类方法,并产生不同的结果。

类的继承

在Python中,可以通过在类定义时使用括号指定继承哪个父类来实现类的继承。例如:

class Animal:
    def __init__(self, name):
        self.name = name

class Cat(Animal):
    def meow(self):
        print('Meow!')

class Dog(Animal):
    def bark(self):
        print('Woof!')

my_cat = Cat('Kitty')
print(my_cat.name) # 输出:Kitty
my_cat.meow() # 输出:Meow!

在上面的例子中,我们定义了一个Animal类和两个子类Cat和Dog。Cat和Dog都继承了Animal的属性和方法,Cat还扩展了一个meow方法,Dog扩展了一个bark方法。

多态

多态让不同的子类对象可以调用相同的父类方法,并产生不同的结果。例如:

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError('Please implement this method in the subclass.')

class Cat(Animal):
    def speak(self):
        return 'Meow!'

class Dog(Animal):
    def speak(self):
        return 'Woof!'

animals = [Cat('Kitty'), Dog('Fido')]
for animal in animals:
    print(animal.name + ' says ' + animal.speak())

在这个例子中,我们定义了一个Animal类,它有一个speak方法,但是这个方法并没有实现,而是抛出了一个NotImplementedError异常,因为我们希望子类必须覆盖它。然后我们定义了两个子类Cat和Dog,它们分别覆盖了speak方法,返回不同的结果。最后,我们创建了一个包含两个Animal子类对象的列表,然后遍历这个列表并调用每个对象的speak方法,产生不同的结果。

示例1

class Shape:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def draw(self):
        raise NotImplementedError('Please implement this method in the subclass.')

class Square(Shape):
    def draw(self):
        print('Drawing a square at ({}, {}).'.format(self.x, self.y))

class Circle(Shape):
    def draw(self):
        print('Drawing a circle at ({}, {}).'.format(self.x, self.y))

shapes = [Square(0, 0), Circle(10, 10), Square(20, 20)]
for shape in shapes:
    shape.draw()

在这个例子中,我们定义了一个Shape类,它有一个draw方法,但是这个方法并没有实现,而是抛出了一个NotImplementedError异常。然后我们定义了两个子类Square和Circle,它们覆盖了draw方法。最后,我们创建了一个包含两个Shape子类对象的列表,然后遍历这个列表并调用每个对象的draw方法,Circle和Square分别产生了不同的结果。

示例2

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        raise NotImplementedError('Please implement this method in the subclass.')

class Cat(Animal):
    def speak(self):
        return 'Meow!'

class Dog(Animal):
    def speak(self):
        return 'Woof!'

class Mouse(Animal):
    pass

animals = [Cat('Kitty'), Dog('Fido'), Mouse('Jerry')]
for animal in animals:
    print(animal.name + ' says ' + animal.speak())

在这个例子中,我们定义了一个Animal类,它有一个speak方法,但是这个方法并没有实现,而是抛出了一个NotImplementedError异常,因为我们希望子类必须覆盖它。然后我们定义了两个子类Cat和Dog,它们分别覆盖了speak方法,返回不同的结果。我们还定义了一个Mouse类,它没有覆盖speak方法,所以它会使用父类的方法。最后,我们创建了一个包含三种不同Animal子类对象的列表,然后遍历这个列表并调用每个对象的speak方法,产生不同的结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python类的继承与多态详细介绍 - Python技术站

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

相关文章

  • iPadOS 13.5.1固件下载 iPadOS 13.5.1支持机型与固件下载地址

    iPadOS 13.5.1固件下载攻略 iPadOS 13.5.1是苹果公司最新发布的操作系统版本,它带来了一些修复和改进。如果你想升级你的iPad设备到iPadOS 13.5.1,下面是一个详细的攻略,包括支持的机型和固件下载地址。 支持的机型 iPadOS 13.5.1支持以下iPad设备: iPad Pro 12.9英寸(第一代及以后) iPad Pr…

    other 2023年8月4日
    00
  • 以数据说话 常见四热管CPU散热器对比测试

    以下是常见四热管CPU散热器对比测试的完整攻略: 实验目的 比较常见的四热管CPU散热器在散热性能方面的差异,以帮助用户选择适合自己需求的散热器。 实验材料 四热管CPU散热器A 四热管CPU散热器B 四热管CPU散热器C 四热管CPU散热器D CPU散热测试平台 温度计 热导胶 实验步骤 准备测试平台:将CPU散热器A安装在测试平台上,并使用热导胶将其与C…

    other 2023年10月16日
    00
  • 一篇文章搞懂:词法作用域、动态作用域、回调函数及闭包

    一篇文章搞懂:词法作用域、动态作用域、回调函数及闭包 词法作用域(Lexical Scope) 词法作用域是指变量的可见性和访问规则是在代码编写阶段就确定的。在词法作用域中,变量的作用域是由它们在代码中的位置决定的,而不是在运行时决定的。 示例1: function outer() { var x = 10; function inner() { conso…

    other 2023年8月16日
    00
  • JAVA中的引用与对象详解

    JAVA中的引用与对象详解 在Java中,引用是指向对象的指针,用于访问和操作对象。Java中的引用有不同的类型,包括强引用、软引用、弱引用和虚引用。本文将详细介绍这些引用类型以及它们在Java中的使用。 强引用(Strong Reference) 强引用是最常见的引用类型,它是指向对象的正常引用。只要强引用存在,垃圾回收器就不会回收被引用的对象。例如: O…

    other 2023年10月15日
    00
  • webpack 4 简单介绍

    webpack 4 简单介绍 Webpack 是一个 JavaScript 模块打包工具。它可以将多个 JavaScript 模块打包成一个文件,并且可以处理 CSS、图片等其他类型的文件。Webpack 在前端开发领域获得了广泛的应用,是构建现代 Web 应用的重要工具。 最近,Webpack 4 正式发布,新版本带来了很多新特性和改进。本文将简单介绍 W…

    其他 2023年3月28日
    00
  • c++作用域运算符用法(全局变量和局部变量)

    C++作用域运算符用法(全局变量和局部变量) C++中的作用域运算符(::)用于访问全局变量和局部变量。它允许我们在不同的作用域中访问同名的变量。 全局变量 全局变量是在任何函数之外声明的变量,可以在整个程序中访问。作用域运算符可以用于访问全局变量。 下面是一个示例: #include <iostream> int globalVariable …

    other 2023年7月29日
    00
  • 【python】shellmd5使用的那些事

    【Python】shellmd5使用的那些事 shellmd5是一个Python库,用于计算文件的MD5值。它可以在命令行中使用,也可以在Python脚本中使用。本文将提供一个完整攻略,包括安装、使用方法、示例说明等。 1. 安装 使用pip命令可以轻松安装shellmd5库。在命令行中输入以下命令即可: pip install shellmd5 2. 使用…

    other 2023年5月8日
    00
  • 新手如何正确使用CLion之输出hello world

    下面是关于使用CLion输出hello world的完整攻略,包括环境搭建、代码编写和两个示例说明。 环境搭建 下载安装CLion: 首先,需要从JetBrains官网下载并安装CLion。安装过程中,可以选择安装CMake和编译器。 创建新项目: 打开CLion,选择“Create New Project”,选择“C++ Executable”,然后选择项…

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