百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python | 多态(Python多态的简单例子)

off999 2024-10-25 13:42 43 浏览 0 评论

多态体现一,变量可以指向任意数据类型

多态的第一种体现是,不关注对象的数据类型,同一个变量完全可以在不同的时间引用不同的对象

Python 本身就是一种多态语言,不关心对象的类型

  • 对于弱类型的语言来说,变量并没有声明类型,因此同一个变量完全可以在不同的时间引用不同的对象
  • 毫无疑问,在 Python 中,对象是一块内存,内存中除了包含属性和方法之外,还包含了对象类型。我们通过引用来访问对象,比如 a = A()。首先,Python 创建一个对象 A,然后声明一个变量 a,再将变量 a 与对象 A 联系起来。变量 a 是没有类型的,它的类型取决于其关联的对象。
a = 10
a = 'alex'    # Python中的变量可以随时被赋值任意数据类型

我们曾经谈到过,Python 中的每一个类实际上就是一个数据类型,因此,变量也可以指向不同类的对象:

class Bird:
    def move(self, field):
        print('鸟儿在%s上自由地飞翔~' % field)
class Dog:
    def move(self, field):
        print('狗狗在%s里飞快地奔跑~' % field)
x = Bird()
x.move('天空')
x = Dog()
x.move('草地')

输出的结果为:

鸟儿在天空上自由地飞翔~
狗狗在草地里飞快地奔跑~

同一个变量 x 在执行同一个 move() 方法时,由于 x 指向的对象不同,因此呈现出不同的行为特征,这就是多态。

多态体现二,一类事物有多种形态(Polymorphic)

一个抽象类有多个子类,但方法实现不同

  • 例如:动物类有多个子类,每个子类都重新实现了父类的某个方法,但方法的实现不同(比如动物类都有休息的方法,但不同的动物休息的方式不尽相同)
  • 此时需要有继承,需要方法重写
class Girl(object):
    def __init__(self, name):
        self.name = name

    def game(self):
        print('%s蹦蹦跳跳地玩耍...' % self.name)


class Nurse(Girl):
    def game(self):
        print('%s脱裤子打针' % self.name)


class Boy(object):
    def __init__(self, name):
        self.name = name

    def game(self, girl):
        print('%s和%s快乐地玩耍' % (self.name, girl.name))
        girl.game()


xiaoming = Boy('小明')
xiaohong = Girl('小红')
xiaoli = Nurse('小丽')

xiaoming.game(xiaohong)
xiaoming.game(xiaoli)

输出的结果为:

小明和小红快乐地玩耍
小红蹦蹦跳跳地玩耍...
小明和小丽快乐地玩耍
小丽脱裤子打针

Nurse 有 Girl 类的方法和属性,是它的子类。方法名虽然相同,但实现的方式略有差异。具有相同父类,继承相同方法,在子类中对父类的方法进行了修改,就是多态的第二种体现。

多态性

多态性(polymorphism)指的是,在多态基础上,定义统一的共同接口(在类的外面定义单独的函数),从而实现使用一个函数调用不同类的同名方法。

不同类的对象作为函数的参数时,因为方法不同,得到的结果也会有差异。

多态性的具体实现方法如下:

class Person:
    def relax(self):
        print('人需要休息')
class Alex:
    def relax(self):
        print('睡觉')
class BigB:
    def relax(self):
        print('买沙发')
        
# 定义一个函数作为访问多个类的relax方法的统一接口
def relax_func(person):
    person.relax()
    
a = Alex()
b = BigB()
p = Person()

relax_func(a)
relax_func(b)
relax_func(p)

输出的结果为:

睡觉
买沙发
人需要休息

鸭子类型

鸭子类型是 Python 中比较推崇的多态的另一种体现形式。

鸭子类型不关心类型,不需要继承,只关注方法的实现,这种情况被称为鸭子类型。

鸭子类型名字的来源于一句话:“当看到一只鸟走起来像鸭子、游起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称作‘鸭子’”。

套用过来就是,当两个类,有同名方法,不管这两个类是干什么用的,也不管它们之间有没有联系(依赖、组合或继承),都可以用同一个接口来调用。

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

比如,人、鸭子、鱼、猪和船都会游泳,但是他们是不同的类,他们之间没有任何联系。而我们却可以在外面定义一个统一的接口来调用他们之间游泳的方法:

class Person:
    def swim(self):
        print('人可以游泳')
class Duck:
    def swim(self):
        print('鸭子会游泳')
class Fish:
    def swim(self):
        print('鱼会游泳')
class Pig:
    def swim(self):
        print('猪会游泳')
class Ship:
    def swim(self):
        print('船会游泳')
   
# 建立鸭子类型
def swimming(obj):
    obj.swim()
    
xiaoming = Person()
xiaohuang = Duck()
paopao = Fish()
peiqi = Pig()
titanic = Ship()

swimming(xiaoming)
swimming(xiaohuang)
swimming(paopao)
swimming(peiqi)
swimming(titanic)

输出的结果为:

人可以游泳
鸭子会游泳
鱼会游泳
猪会游泳
船会游泳

多态总结

Python 是一门天然支持多态的编程语言。

多态增加了程序的灵活性(通用性),以不变应万变,不论对象千变万化,使用者都是使用同一种形式(外部定义的一个函数)去调用。

增加程序的可扩展性,通过继承某个类创建的一个新类,接口使用者无需更改自己的代码,还是用原方法调用。

多态和多态性对比:

多态强调的是,一类事物由不同的形态。

多态性强调的是,同一操作,作用对象不同,表现出不同的实现方式(只关心行为结果)

相关推荐

电脑连接投影仪快捷键(笔记本电脑如何连接投影仪)

电脑如何设置于投影的仪连接的电脑快捷键电脑连接投影仪的快捷键: 1、可以通过使用“FN+F4”或“FN+F8”组合键来切换投影仪画面。 2、如果使用的是WIN7及以上系统,可以按“WIN+P”组合键,...

手机远程桌面连接电脑(手机远程桌面连接电脑app)

想要使用手机远程桌面连接电脑,需要使用一款支持远程桌面协议的应用,比如MicrosoftRemoteDesktop或TeamViewer等。首先,需要在电脑上安装相应的远程桌面服务,并开启远程桌面...

itunes备份文件(itunes备份文件把c盘爆满了)
  • itunes备份文件(itunes备份文件把c盘爆满了)
  • itunes备份文件(itunes备份文件把c盘爆满了)
  • itunes备份文件(itunes备份文件把c盘爆满了)
  • itunes备份文件(itunes备份文件把c盘爆满了)
ghost系统之家win10(windows ghost)

Ghost备份系统Win10可以通过使用Ghost软件来完成。首先,需要下载和安装Ghost软件。然后,将系统文件和数据备份到外部硬盘或其他存储设备中。接下来,打开Ghost软件,选择备份选项,并按照...

免费cad制图软件(电脑版cad免费怎么下载)

迅捷cad编辑器永久免费版全面支持图纸的编辑功能,软件体积小巧功能强大,他支持几乎所有主流的图片格式,让用户不会出现无法打开图纸的困扰,也不会让用户收到领域的困扰,包括电气、机械、建筑等等领域的cad...

笔记本电脑没声音是什么原因

笔记本电脑没有声音的原因是:1.声音是否被调到最小了。2.音频是否被禁用了。3.声卡驱动是不是有问题。4.如果电脑既没有声音也没有小喇叭的图标,则表示电脑的音频设备未启用。笔记本电脑没有声音的原因是:...

melogin路由器设置登录入口(192.168.1.1直接进入)

melogincn路由器的设置步骤如下第一、路由器线路连接1、请把你的.水星双频路由器上的WAN接口,用网线连接到猫的网口。如果你家宽带没有用到猫,就把入户的宽带网线,插在路由器的WAN口。2、把你的...

如何优化电脑性能
如何优化电脑性能

可以通过以下几个步骤来提高电脑运行速度和游戏流畅度:1.清理垃圾文件和无用程序,可以使用系统自带的清理工具或第三方软件;2.关闭开机自启动项,只保留必要的程序开机启动;3.升级硬件,比如增加内存、更换硬盘等;4.优化系统设置,如关闭不必要的...

2026-01-02 06:51 off999

ie8以上版本浏览器(ie8及以上版本浏览器)

浏览器IE8版本以上的意思就是当浏览的网页不支持低版本的IE浏览器,就会提示需要版本较高的IE8以上的版本才可以打开浏览网页。IE浏览器是美国微软公司推出的一款网页浏览器,原名MicrosoftIn...

适合电脑的应用商店(电脑最好的应用商店)

1.MicrosoftToDo推荐理由:微软出品,必属精品2.Microsoft便笺推荐理由:又是一款微软官方出品的良心免费应用,相比MicrosoftToDo,Microsoft便笺更加...

家里无线网连上不能用(家里无线网不能使用)

WiFi连上但不能使用可能有多种原因。以下是一些常见问题和解决方法:1.路由器问题:首先要确认路由器是否正常工作。可以尝试重启路由器,等待几分钟后再次连接并测试。2.网络设置问题:检查设备上的网络...

低价香港服务器(香港服务器推荐性价比)

香港最好的服务器是双向cn2+移动+联通三线优化直连的,性能配置都非常高,而且速度还非常稳定。 香港服务器的使用方法:1、首先需要选择一个服务商进行购买服务器;2、购买成功后,可在本地计算机...

免费360清理大师官方版(华为自带清理软件)

挺好用的。它可以清除你手机的里面的垃圾,检测和修复软件安全性。还有一些漏洞垃圾,你可以试着对比和使用,功效和针对性比较强。您杀毒没有效果的原因可能是您的安全软件版本过旧导致的,建议您使用最新版的腾讯手...

万能解压器安卓版(万能解压器官方下载)

是一款手机文件的助手。万能解压器手机版。专注于快速解压和压缩的文件管理工具!支持ZIP,RAR,7Z,TAR,ZIPX,GZIP,JAR等压缩和解压文件格式。是超好用、超便捷的解压软件!支持在手机上将...

cad看图(cad看图王)

以下是一些CAD看图的方法和技巧:1.放大/缩小:使用滚轮或放大镜工具可以方便地放大或缩小绘图。2.平移:使用平移工具可以在不改变视角的情况下将绘图向上、向下、向左或向右移动。3.旋转:使用旋转...

取消回复欢迎 发表评论: