python多态协议鸭子类型分析
发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,本篇内容介绍了"python多态协议鸭子类型分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口(
千家信息网最后更新 2024年11月22日python多态协议鸭子类型分析
本篇内容介绍了"python多态协议鸭子类型分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
接口(python 中的协议)的多种不同的实现方式即为多态。多态的作用,就是为了类在继承和派生的时候,保证使用"家谱"中任一类的实例的某一属性时的正确调用。
from abc import ABCMeta, abstractmethod# 鸭子类class Dock(metaclass=ABCMeta): @abstractmethod def Swimming(self): # 游泳方法协议(接口) pass @abstractmethod # 走路协议(接口) def Walk(self): pass @classmethod def __subclasshook__(cls, C): # 判断是否另一个比较类是否实现了 Swimming Walk 协议, 如果实现了鸭子类的这两个协议, # 那么比较类的类型就是一个鸭子类型 # 当代码执行中如果执行到对象和这个类进行 isinstance 类型判断时会走到这个函数进行判断 for method in ('Swimming', 'Walk'): for B in C.__mro__: if method in B.__dict__: if B.__dict__[method] is None: return NotImplemented break else: return NotImplemented return True# 狗类class Dog(object): # 实现swimming 协议 def Swimming(self): print("狗会狗刨") # 实现walk 协议 def Walk(self): print("狗会走路") def Eat(self): print("狗喜欢吃骨头")# 乌龟类class Tortoise(object): # 实现swimming 协议 def Swimming(self): print("乌龟会潜水") # 实现walk 协议 def Walk(self): print("乌龟会走路") def Eat(self): print("乌龟喜欢吃鱼")dog = Dog()tortoise = Tortoise()print(isinstance(dog, Dock)) # Trueprint(isinstance(tortoise, Dock)) # True
可以看到,在上面的代码中,只要实现了 Dock 类中的 swimming 和 Walk 方法,那么这个类就可以被叫做 Dock 类
应用场景 如: for 循环, 在python 中 for 循环只能用于可迭代对象, 那么, 我自己定义的类实现了 __iter__协议(接口),这个实例类就是一个可迭代对象,可以被for 循环使用
python 中定义协议类协议使用 @abstractmethod 装饰器,@abstractmethod 装饰过的类是不能进行初始化的,相对于c++中的纯虚函数类
这个类只能当做协议(接口)类
"python多态协议鸭子类型分析"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
类型
鸭子
接口
多态
乌龟
对象
就是
循环
分析
代码
内容
函数
实例
方法
更多
知识
迭代
不同
实用
学有所成
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
物联网项目数据库选择
软件开发用什么软件开发
新乡市深远网络技术
软件开发施工进度表
ui与软件开发区别
云服务器商家
什么是重大网络安全事件
池州政府软件开发
数据库主键怎么使用查阅向导
sscom5串口助手服务器
统战部署网络安全与信息化工作
江阴软件开发
oracle数据库比对
dataset数据库同步
云计算下网络安全技术的重要价值
全球网络安全存在的隐患
创建数据库不能同时创建表对吗
ns方舟怎么进服务器
access数据库的功能
服务器cmd命令进入安全模式
虹口区软件开发参考价格
网络版数据库和单机版数据库区别
志愿数据库设计
sql的服务器
软件让电脑变服务器
关于互联网与新兴科技的名言
开源管理软件开发平台
数据库查询不同年龄学生的人数
数据库系统的开发有什么模型
网络安全第五级