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
版权声明:本文为Mr_zhangbz原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。