7.多态与多态性


多态:多态指的是一类事物有多种形态,如动物有多种形态:人,狗,猪

#定义动物这一抽象类,动物有多态:人,狗,猫

import abc

class Animal(metaclass=abc.ABCMeta):  #抽象类动物
    @abc.abstractmethod
    def walk(self):
        pass
    
    @abc.abstractmethod
    def talk(self):
        pass


class People(Animal):  #定义类:人
    def walk(self):
        print('人会走路')
        
    def talk(self):
        print('人会大声喊')


class Dog(Animal):   #定义类:狗
    def walk(self):
        print('狗会跑')

    def talk(self):
        print('狗会狂吠')


class Cat(Animal):     #定义类:猫
    def walk(self):
        print('猫会上树')

    def talk(self):
        print('猫会喵喵喵')
多态性

多态性:是指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性
静态多态性:如任何类型都可以用运算符+进行运算,例如字符串、列表之间在python中可以用+进行合并
动态多态性:

peo=People()
dog=Dog()
cat=Cat()

#peo、dog、pig都是动物,只要是动物肯定有talk方法
#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo.talk()
dog.talk()
cat.talk()

# 人会大声喊
# 狗会狂吠
# 猫会喵喵喵

更进一步,我们可以定义一个统一的接口func来使用动物会叫这一特性

def func(obj):
    obj.talk()

func(peo)
func(dog)
func(cat)

# 人会大声喊
# 狗会狂吠
# 猫会喵喵喵
多态性的优点

1.增加了程序的灵活性
以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)

2.增加了程序额可扩展性
通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

鸭子类型

Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’
python程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象
也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。
例1:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法
例2:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值