python多态协议鸭子类型分析
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,本篇内容介绍了"python多态协议鸭子类型分析"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口(
千家信息网最后更新 2024年11月11日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安全错误
数据库的锁怎样保障安全
临沧心悦网络技术有限公司
网络安全漏洞地位
我的世界服务器状态图
什么是网络网络安全假冒
ssh服务器下载文件
新时空网络技术有限公司
软件开发过程的一部分
mdf是哪个数据库文件扩展名
数据库三级表
服务器并发卡顿怎么解决
如何使用网络安全照片
mysql数据库使用领悟
海康cvr服务器接入录像机
数据库安装包可以放在目录里吗
四维星软件开发
通化学习网络技术
工业网络技术市场
天水力天软件开发有限责任公司
宿豫区自动化网络技术哪家好
php数据库配置文件连接
济南鲸熹网络技术有限公司
焦点访谈网络安全专题课
服务器启动ssh
胜利欧赔数据库
千千阙歌伴奏软件开发
广州路客互联网科技怎么样
画饭圈现象绘网络安全手抄报
小米路由 代理服务器
数据库大小表关键区别
数据库age