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

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

off999 2024-10-25 13:42 36 浏览 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 是一门天然支持多态的编程语言。

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

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

多态和多态性对比:

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

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

相关推荐

u盘重装系统蓝屏进不去(u盘装系统重启蓝屏)

尊敬的用户您好:可按下面的步骤进行系统盘装系统:1.买一张win7光盘,将系统光盘放入光驱里。2.打开电源,然后观察屏幕的提示,在启动系统之前有按“f2进行bios设置。3.设置启动方式。找到boot...

win快捷键大全(win快捷键大全表)

win快捷键:单独按Windows:显示或隐藏“开始”功能表Windows+BREAK:显示“系统属性”对话框Windows+D:显示桌面或恢复桌面Windows+M:最小化所有窗口Windows...

u盘突然要格式化怎么回事(用着的u盘突然要格式化)

U盘提示格式化的原因可能有以下几点:文件系统损坏:U盘的文件系统可能出现损坏,导致无法正常读取和写入数据。病毒感染:U盘可能被病毒感染,病毒会破坏文件系统或隐藏文件。不兼容的文件系统:U盘可能使用了一...

路由器pppoe怎么设置(路由器如何设置pppoe上网)

移动宽带PPPOE是不用设置的,你只要把帐号和密码填上其他都不选就能上网。但是要注意连接到你电脑的网线是直接经过一个路由器后连接到猫上的,因为我见过有人是这样连接的猫---路由器---路由器---电脑...

win7桌面图标设置在哪里(win7桌面图标在哪个文件夹)

要调出Win7桌面图标,首先需要进入桌面。可以通过点击任务栏上方的“显示桌面”按钮或按下Windows键+D快捷键进入桌面。在桌面上右键单击空白区域,选择“个性化”,然后选择“更改桌面图标”选项。在弹...

win7手机壁纸(windows7手机桌面主题)

1.首先我们打开手机进入到桌面,找到设置图标点击打开。华为手机如何设置自定义锁屏壁纸2.进入到设置界面之后,点击下方的显示选项。华为手机如何设置自定义锁屏壁纸3.然后我们就可以在显示界面中找到壁纸...

怎么开启路由器wifi(怎么开启路由器的dhcp功能)

把路由器改为开放网络方法如下:1、打开浏览器,在地址栏输入路由器网关IP地址(路由器背后的标签上有,一般是192.168.1.1),输入登录用户名和密码(一般均为admin);2、登录成功后就显示运行...

win10加载不出来桌面黑屏(window10加载不出来)

方法一、如果是遇到了突发性黑屏首先尝试使用Ctrl+Alt+Delete组合键来进行电脑重启一般重启可以解决大部分黑屏故障。win10电脑黑屏按什么键恢复_win10电脑黑屏一键恢复的方法方法...

怎么用火绒关闭win安全中心(win10火绒安全软件怎么关闭)

一、火绒防火墙关闭方法在电脑上运行火绒软件后,点击首页界面的“防护中心”,在病毒防护界面可以关闭文件、U盘、邮件等保护功能,。系统防护:在该界面可以关闭系统防护功能,。网络防护:可以关闭网络保护等功...

微软应用商店下载手机版(微软应用商店在哪下)

、在桌面任务栏找到微软应用商店,点击并打开。2、进入页面后点击【应用】,进入应用页面。3、在页面里往下移动,找到热门应用,找到一个软件,点击进入。4、进入页面后,点击【安装】,软件会自动安装,安装完毕...

win11系统怎么查看电脑配置(win11怎么查看系统版本)

答:win11查看电脑配置步骤如下。1.点击下方任务栏的windows图标或者按下键盘“windows键”打开开始菜单。2.在开始菜单中找到“设置”或“settings”,一般是右上角的齿轮状按钮,3...

麦克风没坏但是没声音(麦克风没声怎么回事)

几种可能性,供您参考:1、麦是完全好的(其它机子上可以用)2、插孔没有插错3、音量控制里的麦克风并没有静音掉4、声卡驱动已重装过N次,新的旧的都试过了5、音量控制→属性→录音→麦克风下面的勾...

win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
  • win10系统怎么分区(win10应该怎么分区)
wps office是干什么的(wps office是干什么的可以卸载吗)

   WPSOffice一站式办公服务平台,具有可兼容Word、Excel、PPT三大办公组件的不同格式,支持PDF文档的编辑与格式转换集成思维导图、流程图等诸多功...

百度网页(百度网页自动翻译怎么设置)

1、百度的新闻源网站太多了,基本上大型的商业门户+政府官方的媒体、机构部门都是。2、出现在【百度新闻】里的网站都是新闻源网站。3、怎么判断一个网站是不是新闻源:1)在百度新闻下直接搜网站名字,如果出现...

取消回复欢迎 发表评论: