【Python】标准多态和鸭子多态

多态的概念:同一个方法名,在不同的对象上调用时,能呈现出不同的行为

Python中支持:标准多态、鸭子多态

标准多态

bash 复制代码
from abc import ABC,abstractmethod

class Animal(ABC):
    @abstractmethod
    def eat(self):
        pass

class Dog(Animal):
    def eat(self):
        print("狗吃骨头")

class Cat(Animal):
    def eat(self):
        print("猫吃鱼")


def eat(animal:Animal):
    animal.eat()

d1 = Dog()
c1 = Cat()
eat(d1)
eat(c1)

必备条件

  1. 必须要有继承关系
  2. 必须要有方法重写
  3. 父类引用指向子类对象

鸭子多态

核心理念:如果一个东西看起来像鸭子,叫起来也像鸭子,那它就是鸭子

鸭子类型是一种编程风格,它不检查对象的类型,只关注对象能否"做某件事"(是否有对应的方法)

鸭子多态(基于行为):完全不需要继承。函数不检查传入对象的类型,只直接调用它需要的方法。只要传入的对象恰好拥有这个方法(且能正常工作),代码就能跑通;如果没有,运行时会报错。

bash 复制代码
class Cat:
    def eat(self):
        print("猫吃鱼")

class Dog:
    def eat(self):
        print("狗吃骨头")

class Computer:
    def eat(self):
        print("电脑吃内存")

def eat(animal):
    animal.eat()

c1 = Cat()
d1 = Dog()
cm1 = Computer()

eat(c1)
eat(d1)
eat(cm1)
相关推荐
用户8356290780511 小时前
Python 操作 Excel:创建数组公式与 R1C1 公式
后端·python
万化冥合2 小时前
怎么批量把 Word 转 PDF?
python·pdf·c#·word
~城南花已开~2 小时前
Redfish 事件接收服务搭建指南(Ubuntu Server 实测)
linux·服务器·python·ubuntu
fengyangaiGEO2 小时前
如何通过GEO优化实现外贸B2B询盘增长?
人工智能·python
jianxuan2 小时前
Spring Boot + Maven 接入 Allatori:从普通打包到可选混淆发布
spring boot·python·maven
不一样的故事1262 小时前
Prompt 工程(Prompt Engineering)
前端·人工智能·python
我命由我123452 小时前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
zh路西法2 小时前
【模型式强化学习】(三):MBPO——短轨迹生成与模型数据驱动的策略优化
python·强化学习·pe·sac·pets·mbpo·mbrl
Angeldream1232 小时前
第 9 章 医学影像项目实战
大数据·图像处理·人工智能·python·医学影像处理