python中的多态是如何运用的?

灿灿灿的第十五次python记录——继承,重写,多态 python第十五次记录一、继承机制1.1 构造函数1.2 重写方法二、继承机制三、多态四、总结 一、继承机制 ¥子类继承了父类,就继承了父类的方法和属性。 1.可以修改父类的状态或重载父类的行为 2.可以添加新的状态和行为。 关于继承的规则: 1.子类不能直接访问父类中私有的(private)的成员变量和方法。 1.1 构造函数 1.子类不重写 init,实例化子类时,会自动调用父类定义的 init。(构造函数可以被继承) 例子演示: class Father(object): def __ini 阅读详情

我们都知道,Python 是弱类型语言,其最明显的特征是在使用变量时,无需为其指定具体的数据类型。这会导致一种情况,即同一变量

可能会被先后赋值不同的类对象,例如:

class CLanguage:
    def say(self):
        print("赋值的是 CLanguage 类的实例对象")
class CPython:
    def say(self):
        print("赋值的是 CPython 类的实例对象")
a = CLanguage()
a.say()
a = CPython()
a.say()

运行结果为:

赋值的是 CLanguage 类的实例对象
赋值的是 CPython 类的实例对象

可以看到,a 可以被先后赋值为 CLanguage 类和 CPython 类的对象,但这并不是多态。类的多态特性,还要满足以下 2 个前提条件:继承:多态一定是发生在子类和父类之间;重写:子类重写了父类的方法。

下面程序是对上面代码的改写:

class CLanguage:
    def say(self):
        print("调用的是 Clanguage 类的say方法")
class CPython(CLanguage):
    def say(self):
        print("调用的是 CPython 类的say方法")
class CLinux(CLanguage):
    def say(self):
        print("调用的是 CLinux 类的say方法")
a = CLanguage()
a.say()
a = CPython()
a.say()
a = CLinux()
a.say()

执行结果

调用的是 Clanguage 类的say方法
调用的是 CPython 类的say方法
调用的是 CLinux 类的say方法

可以看到,CPython 和 CLinux 都继承自 CLanguage 类,且各自都重写了父类的 say() 方法。从运行结果可以看出,同一变量 a 在执行同一个 say() 方法时,由于 a 实际表示不同的类实例对象,因此 a.say() 调用的并不是同一个类中的 say() 方法,这就是多态。

但是,仅仅学到这里,读者还无法领略 Python 类使用多态特性的精髓。其实,Python 在多态的基础上,衍生出了一种更灵活的编程机制。

继续对上面的程序进行改写:

class WhoSay:
    def say(self,who):
        who.say()
class CLanguage:
    def say(self):
        print("调用的是 Clanguage 类的say方法")
class CPython(CLanguage):
    def say(self):
        print("调用的是 CPython 类的say方法")
class CLinux(CLanguage):
    def say(self):
        print("调用的是 CLinux 类的say方法")
a = WhoSay()
#Python小白学习交流群:153708845
#调用 CLanguage 类的 say() 方法
a.say(CLanguage())
#调用 CPython 类的 say() 方法
a.say(CPython())
#调用 CLinux 类的 say() 方法
a.say(CLinux())

程序执行结果为:

调用的是 Clanguage 类的say方法
调用的是 CPython 类的say方法
调用的是 CLinux 类的say方法

此程序中,通过给 WhoSay 类中的 say() 函数添加一个 who 参数,其内部利用传入的 who 调用 say() 方法。这意味着,当调用

WhoSay 类中的 say() 方法时,我们传给 who 参数的是哪个类的实例对象,它就会调用那个类中的 say() 方法。

【Python】新手入门:python面向对象编程的三大特性是什么?python继承、封装、多态的特性都有哪些? Python作为面向对象编程语言,其核心特性包括继承、封装和多态。继承允许子类复用父类功能并扩展新特性,通过方法重写实现差异化。封装通过双下划线前缀隐藏内部细节,虽可强制访问但遵循约定保护数据安全。多态则基于动态类型特性,同一方法在不同子类中呈现不同行为,提升代码灵活性。三者协同构建高内聚低耦合的代码结构,既简化开发又增强可维护性。初学者可通过实践案例理解语法变形、方法重写等机制,结合工具调试逐步掌握面向对象编程精髓。 阅读详情

相关推荐

Datawhale~数据挖掘实践之序列问题处理~天池·资金流入流出预测-挑战Baseline~Day01~数据探索与分析

写在前面✍ 本系列笔记基于天池平台上“资金流入流出预测-挑战Baseline”学习赛,记录如何完整的打一次数据挖掘类比赛。同时,该比赛属于序列建模问题,希望学习完成这个任务,可以对序列问题的处理有一定的独立思考能力和实践操作能力,可以将所学理论,用编码的形式和实际的问题得到深入。 第一篇,EDA Content: 初步了解赛题及数据 1.1 任务 1.2 用户基本信息数据 1.3 用户申购赎回数据 1.4 收益率表 1.5 银行间拆借利率表 1.6 提交格式 1.7 评分指标 EDA 1 初.

小卜妞的博客 2360

Python中的多态是如何运用的?案例详解

我们都知道,Python是弱类型语言,其最明显的特征是在使用变量时,无需为其指定具体的数据类型。这会导致一种情况,即同一变量 可能会被先后赋值不同的类对象,例如: classCLanguage: defsay(self): print("赋值的是CLanguage类的实例对象") classCPython: defsay(self): print("赋值的是CPython类的实例对象") a=CLanguage() a.s...

QQ2352108083的博客 601

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片

转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。

qq_32273059的博客 1581

python如何使用多态_python中的多态是如何运用的?案例详解

我们都知道,Python是弱类型语言,其最明显的特征是在使用变量时,无需为其指定具体的数据类型。这会导致一种情况,即同一变量可能会被先后赋值不同的类对象,例如:classCLanguage:defsay(self):print("赋值的是CLanguage类的实例对象")classCPython:defsay(self):print("赋值的是CPython类的实例对象")a=...

weixin_39611161的博客 146

k8s 不同node之间pod ip不通

底层k8s使用calico网络,ipip网络模式,kubevirt启动了2台虚拟机;在这两台虚拟机上再搭建k8s,calico网络,ipip网络模式。说明:我是使用helm安装的calico,改这个模式要改crd资源ippools。其他方式安装的calico修改方法可能不一样。在虚拟机上的k8s上启动了2个pod,分布在不同的node上,这两个pod不能ping通对方的pod ip。修改虚拟机之上的k8s集群的calico网络的ipipMode为Never即可,之前使用的是Always。

weixin_40548182的博客 4056

PyTorch实战(26)——PyTorch分布式训练

在本节中,我们将探讨如何通过跨机器和机器内多进程的分布式训练来加速模型训练过程。我们将系统学习 PyTorch 提供的三大分布式训练 API——torch.distributed、torch.multiprocessing 以及 torch.utils.data.distributed.DistributedSampler,使用这些 API 能够极大的简化分布式训练,介绍如何使用 PyTorch 的分布式训练工具,在 CPU 和 GPU 上加速训练。

盼小辉丶的博客 3882

python多态_Python中的多态性

什么是多态性:多态性这个词意味着有多种形式。在编程中,多态性意味着对不同类型使用相同的函数名。内置多态函数示例:# Python program to demonstrate in-built poly- # morphic functions # len() being used for a string print(len("geeks")) # len() being used fo...

weixin_39617473的博客 159

修改 Alist 密码时报错?看看这个坑怎么解决!

启动服务后,再修改密码”。以后再遇到类似问题,先检查服务是否正常运行,说不定就能少踩不少坑。如果还有其他 Alist 的问题,欢迎在评论区留言交流~

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 1155

Python 面向对象编程中的多态特性详解

Python 面向对象编程中的多态特性详解

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 2339

CMOS Sensor的调试经验分享

我这里要介绍的就是CMOS摄像头的一些调试经验。 首先,要认识CMOS摄像头的结构。我们通常拿到的是集成封装好的模组,一般由三个部分组成:镜头、感应器和图像信号处理器构成。一般情况下,集成好的模组我们只看到外面的镜头、接口和封装壳,这种一般是固定焦距的。有些厂商只提供芯片,需要自己安装镜头,镜头要选择合适大小的镜头,如果没有夜视要求的话,最好选择带有红外滤光的镜头,因为一般的sensor都...

camerall 3764

MDF和DHF、DMR、DHR三者差异?注册与备案文件?医疗器械产品技术要求编写指导原则

定义:设计历史文档(DHF ) 指的是描述某医疗器械成品设计过程的有关记录。内容:DHF包括设计开发活动的所有记录。从最初的策划、客户需求、设计输入,设计输出、设计验证、设计确认、所有的设计评审,设计转换,以及设计变更相关的所有记录。均属于DHF的一部分。要求:各制造商应为每个类型的器械建立并保持设计历史文件。设计历史文件应包含或引用必要的记录,以证实设计符合经批准的设计计划和法规的要求。

学海无涯的专栏 9112

多态-python

当方法中既不需要使用实例对象(例如实例对象,实例属性),也不需要使用类对象(例如类属性、类方法,创建实例等)时,定义静态方法。需要用装饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为参数。定义:多态是一种使用对象的方式,子类重写父类的方法,调用不同子类对象的相同父类方法,可以产生不同的执行结果。类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改属性,表示的是创建了一个实例属性。当方法中需要使用类对象(如方位私有类属性等)时,定义类方法。

weixin_47347921的博客 494

VHDL语法学习笔记:一文掌握VHDL语法

今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货。 VHDL语法学习笔记 一、VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed Integrated Circuit Hardware DescriptionLanguage,诞生于 1982 年。 1987 年底,VHDL 被 IEEE 和美国国防部确认为标准硬件描述语言。自 IEEE 公布了 VHDL 的标准版本 IEEE-1076(简称 87 版)...

2万+

【Python单点知识】深入理解与应用类多态

Python多态类介绍

使者大牙ℂypher的博客 1513

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

python 面向对象之多态

多态 多态指的是一类事物有多种形态 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(s...

156

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Python多态:提升代码灵活性与扩展性的实战指南!!

注意事项确保方法签名一致,遵循“接口即协议”原则。避免继承层级过深和菱形继承问题。使用super()确保父类方法按MRO顺序正确调用。常见Bug类型错误:检查传入参数的类型。方法未正确调用:使用super()调用父类方法。方法冲突:使用MRO解决多重继承中的方法冲突。合理使用多态,能够使代码更简洁、灵活且易于扩展,但也需要谨慎设计,避免过度复杂的继承结构和方法冲突。4. 插件系统设计综合实战在本节中,我们将以插件系统设计为案例,全面展示如何在项目中运用多态,解决不同插件的扩展问题。

AI Agent 首席体验官 1512

python中的多态与鸭子类型

python与鸭子类型 调用不同的子类将会产生不同的行为,而无须明确知道这个子类实际上是什么,这是多态的重要应用场景。而在python中,因为鸭子类型(duck typing)使得其多态不是那么酷。 鸭子类型是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。这个概念的名字来源于由James Whitcomb Riley...

javadada1197的博客 208

面向对象——多态和多态性

1、什么是多态:多态指的是同一种/类事物的不同形态(父类对象的多种(子类对象)状态)2、为什么要使用多态? # 多态性:在多套的背景下,可以不用考虑对象的具体类型的前提下直接使用对象# 多态性的精髓:统一 3、如何使用多态 1 imort abc 2 class People(metaclass=abc.ABCMeta): 3 def __ini...

weixin_30306905的博客 145

Python多态

1.多态 其他语言中所谓多态,指的是一个方法多种实现,在继承前提下,父类规定了子类的接口,使得可以相同的方式调用子类的方法,但会获得不同的功能。 Python崇尚的是“鸭子类型”(Duck typing),这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”。“鸭子类型”中不关心对象的类型,只关心对象的行为。 鸭子类型是动态类型的一种风格。在这种风格中,一个对象有效的

weixin_44799030的博客 229

python多态的应用场景

多态性是面向对象编程的一个重要概念,它允许使用不同类的对象调用相同的方法名,实现同一种操作的不同行为。在函数中使用多态性,函数可以接受不同类型的参数,并且根据参数的类型执行不同的操作。总的来说,多态性提高了代码的灵活性和可扩展性,使得不同类型的对象能够以一致的方式进行处理。已经在前面的回答中提到,通过继承和多态性,可以实现同一方法名的不同行为,提高代码的可扩展性和可维护性。多态性在接口设计和抽象类中的应用使得代码更具灵活性,允许引入新的实现而不破坏现有的代码。# 多态性应用于抽象类和接口。

Syasjy的博客 566

python基础之多态与多继承

多态 多态使用 一种事物的多种体现形式,举例:动物有很多种 注意: 继承是多态的前提 函数重写就是多态的体现形式 演示: 思路: 第一步:先定义猫类和老鼠类,继承自object,在其中书写构造方法和eat方法 第二步: 抽取Animal父类,定义属性和eat方法,猫类与老鼠类继承即可 第三步: 定义人类,在其中分别...

qq_29074261的博客 626

一篇文章带你搞懂Python中的继承和多态

点击上方“Python爬虫与数据挖掘”,进行关注回复“书籍”即可获赠Python从入门到进阶共10本电子书今日鸡汤岩溜喷空晴似雨,林萝碍日夏多寒。一、继承的介绍继承是一种创建新的类的方式,...

pdcfighting的博客 236

python识别麻将牌_python 麻将aiPython实现多态、协议和鸭子类型的代码详解

多态问起面向对象的三大特性,几乎每个人都能对答如流:封装、继承、多态。今天我们就要来说一说 Python 中的多态。所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。我在《Python 中的设计模式详解之:策略模式》一文中详细...

weixin_39575937的博客 279

Python教程:多态与多态性

一、多态 Python中多态是指一类事物有多种形态。比如动物有多种形态,人,狗,猫,等等。文件有多种形态:文本文件,可执行文件。 二、多态性 1.什么是多态性? 多态性是指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性 静态多态性:如任何类型都可以用运算符+进行运算 动态多态性:如下 import abc class Animals(metaclass=abc.ABCMeta): @abc.abstractmethod def talk(self):

Python热爱者的博客 688

多态相关

多态 概念: 一种事物具备多种不同的形态 官方解释: 多个不同类对象可以响应同一个方法,产生不同的结果 首先强调多态不是一种特殊的语法,而是一种状态,特性(既多个不同对象可以响应同一个方法,产生不同的结果 ) 既多个对象有相同的使用方法, 好处: 对于使用者而言,大大的降低了使用难度 我们之前写的USB接口,下的鼠标,键盘,就属于多态 实现多态: 接口...

bangchouchong8544的博客 175

python面向对象编程的三大特性之多态

多态:指的是多种状态,当完成某个行为时,使用不同的对象会得到不同的状态。同样的行为(函数),传入的对象不同,得到不同的状态。

qq_45807165的博客 539
上一篇: Python变量的作用域教程
下一篇: 10分钟教你用Python写一个贪吃蛇小游戏,适合练手项目
Python热爱者
博客等级 码龄7年 3059粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值