单词 "多态" 意味着 "多种形式",在编程中,它指的是具有相同名称的方法/函数/操作符,可以在许多不同的对象或类上执行。

函数多态性

一个示例是 Python 中的 len() 函数,它可以用于不同的对象。

字符串

对于字符串,len() 返回字符的数量:

示例

x = "Hello World!"

print(len(x))

元组

对于元组,len() 返回元组中项的数量:

示例

mytuple = ("apple", "banana", "cherry")

print(len(mytuple))

字典

对于字典,len() 返回字典中键/值对的数量:

示例

thisdict = {
"brand": "Ford",
"model": "Mustang",
"year": 1964
} print(len(thisdict))

类的多态性

多态性通常在类的方法中使用,其中我们可以具有相同方法名称的多个类。例如,假设我们有三个类:Car、Boat 和 Plane,它们都有一个名为 move() 的方法:

示例

不同类具有相同的方法:

class Car:
def __init__(self, brand, model):
self.brand = brand
self.model = model def move(self):
print("Drive!") class Boat:
def __init__(self, brand, model):
self.brand = brand
self.model = model def move(self):
print("Sail!") class Plane:
def __init__(self, brand, model):
self.brand = brand
self.model = model def move(self):
print("Fly!") car1 = Car("Ford", "Mustang") # 创建一个 Car 类
boat1 = Boat("Ibiza", "Touring 20") # 创建一个 Boat 类
plane1 = Plane("Boeing", "747") # 创建一个 Plane 类 for x in (car1, boat1, plane1):
x.move()

看看最后的 for 循环。由于多态性,我们可以为所有三个类执行相同的方法。

继承类的多态性

那么具有相同名称的子类的类呢?我们能在那里使用多态吗?如果我们使用上面的示例,并创建一个名为 Vehicle 的父类,并将 Car、Boat 和 Plane 作为 Vehicle 的子类,子类将继承 Vehicle 的方法,但可以重写它们:

示例,创建一个名为 Vehicle 的类,使 Car、Boat 和 Plane 成为 Vehicle 的子类:

class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model def move(self):
print("Move!") class Car(Vehicle):
pass class Boat(Vehicle):
def move(self):
print("Sail!") class Plane(Vehicle):
def move(self):
print("Fly!") car1 = Car("Ford", "Mustang") # 创建一个 Car 对象
boat1 = Boat("Ibiza", "Touring 20") # 创建一个 Boat 对象
plane1 = Plane("Boeing", "747") # 创建一个 Plane 对象 for x in (car1, boat1, plane1):
print(x.brand)
print(x.model)
x.move()

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。

看完如果觉得有帮助,欢迎点赞、收藏关注

Python 中多态性的示例和类的继承多态性的更多相关文章

  1. python中的面向对象学习以及类的继承和继承顺序

    继承 首先编写一串关于类的代码行: __author__ = "Yanfeixu" # class People: 经典类不用加(object) class People(obje ...

  2. python中的tcp示例详解

    python中的tcp示例详解  目录 TCP简介 TCP介绍 TCP特点 TCP与UDP的不同点 udp通信模型 tcp客户端 tcp服务器 tcp注意点   TCP简介   TCP介绍 TCP协议 ...

  3. 【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    一.简介 Lua是一门非常强大.非常灵活的脚本语言,自它从发明以来,无数的游戏使用了Lua作为开发语言.但是作为一款脚本语言,Lua也有着自己的不足,那就是它本身并没有提供面向对象的特性,而游戏开发是 ...

  4. 【转载】【游戏开发】在Lua中实现面向对象特性——模拟类、继承、多态

    [游戏开发]在Lua中实现面向对象特性——模拟类.继承.多态   阅读目录 一.简介 二.前提知识 三.Lua中实现类.继承.多态 四.总结 回到顶部 一.简介 Lua是一门非常强大.非常灵活的脚本语 ...

  5. python中的面向对象学习以及类的多态

    接下来类的第三个重要的特性:多态(一种接口,多种实现) 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特 ...

  6. python中的单例模式、元类

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  7. python中重要的概念:类(class)

    1.名词解释 类:类代表了具有相同特征的一类事物(人) 对象.实例:具体的某一个事物或者是人 实例化:将类变成对象的这么一个过程,即新建一个对象的过程,就是对类的一个实例化过程. 2.格式 函数定义: ...

  8. python中的实例属性和类属性

    在python中,类属性和实例属性的区别是什么? 我认为是作用域的不同,实例对象可以访问类属性,类对象不可以访问实例属性.(类的概念本身就是作用域的概念,你不能让一只猫会飞,猫属于猫类,这一类都不会飞 ...

  9. Python学习笔记(一)类和继承的使用

    一年前就打算学Python了,折腾来折腾去也一直没有用熟练,主要是类那一块不熟,昨天用Python写了几个网络编程的示例,感觉一下子迈进了很多.这几天把学习Python的笔记整理一下,内容尽量简洁. ...

  10. Python中深浅拷贝 垃圾回收与 super继承(六)

    1 python拷贝 深拷贝,浅拷贝 与引用三者的区别 import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy ...

随机推荐

  1. CF1794C Scoring Subsequences题解

    文中 \(a\) 为题目中给的 \(a\). 如果我们要求 \(a_1, a_2, a_3, \dots, a_m\) 的结果, 那么我们可以把 \(a\) 数组从后往前依次除以 \(i\),\(i\ ...

  2. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(10)- 从Serial NAND启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1xxx系列MCU的Serial NAND启动. 最近越来越多的客户在咨询 i.MXRT1xxx 从 Serial N ...

  3. hdfs小文件合并

    HDFS small file merge 1.hive Settings There are 3 settings that should be configured before archivin ...

  4. CRM系统化整合从N-1做减法实践

    1 背景 京销易系统已经接入大网.KA以及云仓三个条线商机,每个条线商机规则差异比较大,当前现状是独立实现三套系统分别做支撑. 2 目标 2022年下半年CRM目标是完成9个新条线业务接入,完成销售过 ...

  5. Llama 2 来袭 - 在 Hugging Face 上玩转它

    引言 今天,Meta 发布了 Llama 2,其包含了一系列最先进的开放大语言模型,我们很高兴能够将其全面集成入 Hugging Face,并全力支持其发布. Llama 2 的社区许可证相当宽松,且 ...

  6. 使用 FastGPT 构建高质量 AI 知识库

    作者:余金隆.FastGPT 项目作者,Sealos 项目前端负责人,前 Shopee 前端开发工程师 FastGPT 项目地址:https://github.com/labring/FastGPT/ ...

  7. [mysql]定制封装MySQL的docker镜像

    前言 基于MySQL的原版镜像做一些个性化配置修改,封装/etc/my.cnf文件到镜像中,并且支持通过环境变量修改innodb_buffer_pool_size.server_id以及自动配置inn ...

  8. 解锁Spring组件扫描的新视角

    本文分享自华为云社区<Spring高手之路10--解锁Spring组件扫描的新视角>,作者: 砖业洋__. 首先,我们将探讨一些Spring框架中IOC(Inversion of Cont ...

  9. Redis系列18:过期数据的删除策略

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  10. ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记

    总览 你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过.这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记 ...