面向对象编程-多态的引入

一、多态的引入

1、先看一个问题

2、使用传统的方法类解决

class Food:
    name=None

    def __init__(self,name):
        self.name=name

class Fish(Food):
    pass

class Bone(Food):
    pass

class Animal:
    name=None

    def __init__(self,name):
        self.name=name

class Cat(Animal):
    pass

class Dog(Animal):
    pass

class Master:
    name=None

    def __init__(self,name):
        self.name=name

    # 给猫猫喂鱼
    def feed_cat(self,cat:Cat,fish:Fish):
        print(f"主人:{self.name} 给动物:{cat.name} 喂的食物是:{fish.name}")

    # 给小狗喂骨头
    def feed_dog(self,dog:Dog,bone:Bone):
        print(f"主人:{self.name} 给动物:{dog.name} 喂的食物是:{bone.name}")

# 测试
master=Master("小明")
cat=Cat("小花猫")
fish=Fish("黄花鱼")
dog=Dog("大黄狗")
bone=Bone("大棒骨")

master.feed_cat(cat,fish)
master.feed_dog(dog,bone)

问题分析:如果动物/食物的种类很多,怎么办?

传统的方法带来的问题是什么?如何解决?

1)问题是:代码的复用性不高,而且不利于代码维护和功能扩展

2)解决方案:引出->多态

二、多态介绍&特别说明

1、怎么理解多态

1)多态顾名思义即多种状态,不同的对象调用相同的方法,表现出不同的状态,称为多态

2)多态通常作用在继承关系上

说明:一个父类,具有多个子类,不同的子类对象调用相同的方法,执行的时候产生不同的状态,就是多态

2、实例演示

class Animal:
    def cry(self):
        pass

class Cat(Animal):
    def cry(self):
        print("小猫喵喵叫...")

class Dog(Animal):
    def cry(self):
        print("小狗汪汪叫...")

class Bird(Animal):
    def cry(self):
        print("小鸟渣渣叫...")

class Pig(Animal):
    def cry(self):
        print("小猪噜噜叫...")

# 注意:在Python面向对象编程中,子类对象可以传递给父类类型
def func(animal:Animal):
    print(f"animal类型是{type(animal)}")
    animal.cry()

# 创建对象
cat=Cat()
dog=Dog()
bird=Bird()
pig=Pig()

# 调用函数
func(cat)
func(dog)
func(bird)
func(pig)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值