8.什么是鸭子类型?

在鸭子类型中,关注的不是对象的类型本身,而是他如何使用的。例如,在不适用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。

class duck():
def walk(self):
print('I am duck,I can walk…')
def swim(self):
print('I am duck,I can swim…')
def call(self):
print('I am duck,I can call…')
duck1=duck()
duck1.walk() 
# I am duck,I can walk…
duck1.call() # I am duck,I can call…

释:鸭子类型在动态语言中经常使用,非常灵活,使得python不想java那样专门去弄一大堆的设计模式。
下面例子用duck typing来实现多态。

#coding=utf-8
 class Duck:
 def quack(self):
print "Quaaaaaack!"
class Bird:
 def quack(self):
print "bird imitate duck."
class Doge:
def quack(self):
print "doge imitate duck."
def in_the_forest(duck):
 duck.quack()
 duck = Duck()
 bird = Bird()
 doge = Doge()
 for x in [duck, bird, doge]:
 in_the_forest(x)

再举个栗子,
我们来hack输出流。

import sys
sys.stdout = open('stdout.log', 'a') #只要是file-like,不管是什么类型
print 'foo'
sys.stdout = sys.stdout #恢复
print 'bar'

这样就把输出流给写入到文件中去了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0. 写在前面 当你开始工作时,你不是在给你自己写代码,而是为后来人写代码。 —— Nichloas C. Zak...
    康斌阅读 10,770评论 1 42
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,212评论 19 139
  • 软件测试人员在进行测试的时候,根据测试项目或者测试对象的不同,会采用不同的方式方法来进行测试,那么,带有支付功能的...
    maple_若尘阅读 4,565评论 0 1
  • 不要了,我什么都不要了。你不要我,就不要我。委曲求全,苟且偷生,我过够了,前半生都是这样。 我就是这样的人,你不满...
    细雨rain阅读 1,472评论 0 0
  • 张恩来饮食来而不往 秋夕 杜牧 银烛秋光冷画屏 轻罗小扇扑流萤 天阶夜色凉如水 卧看牵牛织女星 七夕节又名乞巧节,...
    3fc7a80d24cc阅读 1,706评论 0 0

友情链接更多精彩内容