python的多态、协议及鸭子类型概念

本文介绍了Python中的多态概念,通过举例展示了如何通过自定义类实现多态。同时,阐述了鸭子类型和协议的关系,强调在Python中,多态是基于对象行为而非继承。文章引用了sklearn的例子来进一步说明协议的重要性,并鼓励读者通过查阅相关资料深入理解。
摘要由CSDN通过智能技术生成

多态: 可以对不同类型的对象执行相同的操作,该操作的结果将根据对象类型而异。最常见的例子之一是+运算符,数值型变量、list变量和string变量都支持 ‘+’ 加法操作,但是结果却不同,这就是一种多态。

来看看自定义的类如何支持 '+'

class A:
    def __init__(self,lst):
        self.var = lst
        
    def __add__(self, y):
        return [self.var[0]+y.var[0], self.var[1], y.var[1]]
        
    def __radd__(self, y):
        return [self.var[0]+y.var[0], self.var[1], y.var[1]]
    
a = A([1, 2])
b = A([100,200])
print(a+b)
        

[101, 2, 200]

  上述代码实现了一种奇怪的加法,其中__add__(self, y)和__radd__(self, y)是加法协议要求实现的方法,分别是对左加和右加的支持。上述定义的类并没有显式地继承哪个父类(可以用className.__bases__查看),但是也实现了多态,这是因为python多态是基于对象的行为。

鸭子类型与协议
鸭子类型: 如果走起来像是鸭子,叫起来像鸭子(协议要求),那么它就是鸭子,而不要求它是鸭子夫妇生的(继承

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值