本文介绍了“python多态协议鸭类型分析”的知识。很多人在实际案例的操作中会遇到这样的困难。接下来,让边肖带领大家学习如何应对这些情况!希望大家认真阅读,学点东西!
接口的许多不同实现(python中的协议)被称为多态性。多态性的功能是确保在类继承和派生时正确调用家谱中任何类的实例的属性。
fromabcimportABCMeta,abstractmethod
#鸭子
classDock(元类=ABCMeta):
@抽象方法
defswing(self): #游泳方法协议(接口)
及格
@abstractmethod#行走协议(接口)
defWalk(self):
及格
@classmethod
def__subclasshook__(cls,C):
#确定另一个比较类是否已经实现了SwimmingWalk协议。如果已经实现了duck类的两个协议,
#那么比较类的类型就是鸭子类型。
#代码执行时,如果对象和这个类做isinstance类型判断,就会去这个函数做判断。
甲醛('游泳','散步'):
forBinC。__mro__:
ifmethodinB。__dict__:
ifB。_ _ dict _ _[方法]isNone:
returnNotImplemented
破裂
else:
returnNotImplemented
返回真
#狗
类狗(对象):
#执行游泳协议
定义游泳(自我):
打印(“狗会凿洞”)
#实施步行协议
defWalk(self):
打印(“狗会走路”)
失败(自我):
印刷体(“狗喜欢吃骨头”)
#海龟
类乌龟(对象):
#执行游泳协议
定义游泳(自我):
打印(海龟可以潜水)
#实施步行协议
defWalk(self):
印刷体(“乌龟会走路”)
失败(自我):
印刷体(“乌龟喜欢吃鱼”)
狗=狗()
乌龟=乌龟()
打印(实例(狗、码头))#真
Print (isinstance(乌龟,Dock)) # True可以看到,在上面的代码中,只要实现了Dock类中的游动和Walk方法,这个类就可以称为Dock类。
应用场景是:for循环。在python中,for循环只能用于可迭代对象。然后,我自己定义的类实现了__iter__协议(接口)。此实例类是一个可迭代对象,可由for循环使用。
python中定义的协议类协议使用了@abstractmethod装饰器,与c中的纯虚函数类相比,@abstractmethod装饰的类无法初始化。
此类只能用作协议(接口)类。
“python多态协议鸭类型分析”的内容到此结束。感谢阅读。如果你想了解更多的行业,可以关注网站。边肖将为您输出更多高质量的实用文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/126263.html