Python高阶专题:鸭子类型与多态

1. 鸭子类型

鸭子类型是动态语言的一种风格,Python作为一门动态语言也继承了这种风格,关于鸭子类型官方的解释:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子”,这种解释对于没有深入了解动态语言的程序员来说可能有些牵强,要了解鸭子类型,首先就要了解面向对象编程思想种一种非常重要的思想——多态

2. 多态

面向对象编程的编程思想精髓:封装,继承,多态,对于封装以及继承在这里不做解释,这里以Java为例简单解释一下多态,在Java中是无法实现多继承,但是如果像实现多态就要使用到接口这个概念,不做过多解释。
在这里插入图片描述
在Python中一切皆对象的思想刻入了Python设计的设计理念中,Python中的对象可以作为值传递,返回,所以可以通过这种理念实现多态,鸭子类型就是多态的一种实现

class PagHandler() :
	def Shotter() :
		pass
class DogHandler() :
	def Shotter() :
		pass
class CatHandler() :
	def Shotter() :
		pass
AnimalSequence = [PagHandler,DogHandler,CatHandler]
for Animal in AnimalSequence :
	Animal().Shotter()
3. 鸭子类型通俗解释

子类对象不由其所继承的父类决定,而是由子类的方法决定Python中的魔法函数就是鸭子类型的范例,比如我们实现一个序列类,我们不用继承实现序列的父类对象,而直接实现__getitem__方法即可。

class SequenceHandler :
    def __init__(self,sequence):
        self._sequence = sequence
    def __getitem__(self, item):
        return self._sequence[item]
class PagHandler :
	def Shotter() :
		return "I am a Pag"
class DogHandler:
	def Shotter() :
		return "I am a Dog"

class CatHandler:
	def Shotter() :
		return "I am an Human"
#对于CatHandler这个类,实例化之后调用类Shotter方法,并打印出了" I am an Human" 可以理解为Human 而不是 Cat
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值