IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python-面向对象编程-多态&鸭子类型 -> 正文阅读

[Python知识库]Python-面向对象编程-多态&鸭子类型

多态

概念

????????多态性在现实生活中很普遍。动物都有交生,虽然都是“叫”,但叫声是多种多样的,列如,狗、猫、鸟、狼、狮子等叫声各不相同,即“叫”这个动作效果不同;又如,计算面积,但是长方形、圆、三角形的面积计算公式也不相同。这就是多态。

示例

我们先定义一个类Animal,然后Cat和Dog类继承Animal。

class Animal():
    def whoami(self):
        print('我是一只动物')

class Cat(Animal):
    def whoami(self):
        print('我是一只猫')

class Dog(Animal):
    def whoami(self):
        print('我不仅是动物,我是狗,非常狗')

写一个执行whoami方法的函数

def ops_whoami(animal):
    animal.whoami

创建对象实例,执行函数调用whoami方法

animal1 = Animal()
cat1 = Cat()
dog1 = Dog()

ops_whoami(animal1)
ops_whoami(cat1)
ops_whoami(dog1)

--------------
输出:
我是一只动物
我是一只猫
我不仅是动物,我是狗,非常狗

实现类似静态语言的类型判断

Python中没有严格意义上的多态。其他语言如上述方式,在ops_whoami函数传入形参animal时,形参是要确定类型的。而python的形参不需要确认类型。

而我们可以用isinstance(),来进行类型判单。

我们添加一个非Animal的类型,Bot_duck。(Animal类及其子类的类型,都可以是Animal)

将函数加入isinstance()判断。就可以模拟实现静态语言(javaj、go)的形参的类型确定。

函数在判断类型是Animal类型的时候,才会执行whoami方法。

class Animal():
    def whoami(self):
        print('我是一只动物')

class Cat(Animal):
    def whoami(self):
        print('我是一只猫')

class Dog(Animal):
    def whoami(self):
        print('我不仅是动物,我是狗,非常狗')

class Bot_duck():
    def whoami(self):
        print('我不是动物,我是机器鸭子')

def ops_whoami(animal):
    if isinstance(animal,Animal):
        animal.whoami()
    else:
        print('不是Animal类型')

animal1 = Animal()
cat1 = Cat()
dog1 = Dog()
bot_duck1 = Bot_duck()

ops_whoami(animal1)
ops_whoami(cat1)
ops_whoami(dog1)
ops_whoami(bot_duck1)

-----------------
输出:
我是一只动物
我是一只猫
我不仅是动物,我是狗,非常狗
不是Animal类型

鸭子类型

相较于静态语言(java、go),python这样动态语言参数传入的时候不是必须要传入Animal类型。我们只需要保证传入的对象有一个whoami()方法。

这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

class Animal():
    def whoami(self):
        print('我是一只动物')

class Dog(Animal):
    def whoami(self):
        print('我不仅是动物,我是狗,非常狗')

class Bot_duck():
    def whoami(self):
        print('我不是动物,我是机器鸭子')

def ops_whoami(animal):
    animal.whoami()

animal1 = Animal()
dog1 = Dog()
bot_duck1 = Bot_duck()

ops_whoami(animal1)
ops_whoami(dog1)
ops_whoami(bot_duck1)

-----------------
输出:
我是一只动物
我不仅是动物,我是狗,非常狗
我不是动物,我是机器鸭子

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-28 22:52:51  更:2021-12-28 22:53:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:27:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码