400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Python鸭子类型

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

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

  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. 猫咪警长在跑 

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

学习疑问申请解答
您的姓名
您的电话
意向课程
 

中公优就业

IT小助手

扫描上方二维码添加好友,请备注:599,享学习福利。

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料,活动优惠 领取通道
 
 
Baidu