【Python基础知识】Python鸭子类型

发布 : 优就业IT培训      来源:优就业

2021-06-18 18:12:27

由一个示例引入鸭子类型:

  1. >>> class Person: # 人类
  2. ... def walk(self): # 走路
  3. ... print('this man is walking like a duck')
  4. ... def swim(self): # 游泳
  5. ... print('this man is swimming like a duck')
  6. ...
  7. >>> class Duck: # 鸭类
  8. ... def walk(self): # 走路
  9. ... print('duck is walking')
  10. ... def swim(self): # 游泳
  11. ... print('duck is swimming')
  12. ...
  13. >>> def swimming(arg):
  14. ... # 定义实例实现游泳功能
  15. ... arg.walk()
  16. ... arg.swim()
  17. ...
  18. >>> person = Person() # 创建Person类实例person
  19. >>> duck = Duck() # 创建Duck类实例duck
  20. >>> swimming(person) # 调用的是Person类中的walk()和swim()
  21. this man is walking like a duck
  22. this man is swimming like a duck
  23. >>> swimming(duck) # 调用的是Duck类中的walk()和swim()
  24. duck is walking
  25. duck is swimming

上述程序中,定义了两个类,分别为Person类和Duck类。这两个类具有同名的两个方法walk()和swim()。为了方便对相同方法的类进行统一管理,创建了一个函数swimming(),其参数是一个实例。创建Person类实例person和Duck类实例duck,然后分别调用swimming()函数,参数是person和duck,这样就通过swimming()函数分别调用了两个类中的walk()和swim()方法。如果Person类和Duck类中还有eat()和say()等多个方法,那么也可以放入swimming()函数中,通过它来调用,这样就不需要采用类的实例分别调用每一个方法,从而提高了效率。

下面是一个使用鸭子类型的示例。先创建Car类,类中包含实例属性color,实例方法run(),代码如下:

  1. >>> class Car:
  2. ... def __init__(self, color):
  3. ... self.color = color
  4. ... def run(self):
  5. ... print('{}小汽车在跑'.format(self.color))
  6. ...

再创建 Cat类,类中包含实例属性name,实例方法run(),代码如下:

  1. >>> class Cat:
  2. ... def __init__(self, name):
  3. ... self.name = name
  4. ... def run(self):
  5. ... print('猫咪{}在跑'.format(self.name))
  6. ...

然后创建公共函数get_run(),调用run()方法,代码如下:

  1. >>> def get_run(obj):
  2. ... obj.run()
  3. ...

最后实例化,创建Car类实例car并传递参数'红色',创建Cat类实例cat并传递参数'警长',分别以实例car和cat作为参数,使用公共函数get_run()调用实例方法run(),代码如下:

  1. >>> car = Car('红色')
  2. >>> cat = Cat('警长')
  3. >>> get_run(car)
  4. 红色小汽车在跑
  5. >>> get_run(cat)
  6. 猫咪警长在跑

通过以上示例可知,鸭子类型增加了程序的灵活性和可扩展性,提高了代码的复用性。鸭子类型与多态的区别是,鸭子类型不依靠继承,而多态依靠继承,多态功能的实现是方法的重写。

THE END  

声明:本站稿件版权均属中公教育优就业所有,未经许可不得擅自转载。

领取零基础自学IT资源

涉及方向有Java、Web前端、UI设计、软件测试、python等科目,内容包含学习路线、视频、源码等

点击申请领取资料

点击查看资料详情 

收起 


 相关推荐

问题解答专区
返回顶部