python什么是鸭子类型

news/2025/1/11 9:48:15/

一、鸭子类型

鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定
“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”
我们并不关心对象是什么类型,到底是不是鸭子,只关心行为
鸭子类型在动态语言中经常使用,非常灵活,使得python不想java那样专门去弄一大堆的设计模式

二、代码实现

1.鸭子类型1

class Duck:def quack(self):print("嘎嘎嘎嘎。。。。。")class Bird:def quack(self):print("bird imitate duck....")class geese:def quack(self):print("doge imitate duck....")def in_the_forest(duck):duck.quack()duck = Duck()
bird = Bird()
doge = geese()
for x in [duck, bird, doge]:in_the_forest(x)

运行结果:

嘎嘎嘎嘎。。。。。
bird imitate duck....
doge imitate duck....

鸭子类型要求每个class要有相同的方法

def in_the_forest(duck):duck.quack()

2.鸭子类型2

class duck():def walk(self):print('I walk, i am a duck')def swim(self):print('i swim,i am a duck')class geese():def walk(self):print('i walk like a duck')def swim(self):print('i swim like a duck')
class person():def walk(self):print('this one walk like a duck')def swim(self):print('this one walk like a duck')def watch_duck(a):a.walk()a.swim()small_duck = duck()
watch_duck(small_duck)duck_like_geese = geese()
watch_duck(duck_like_geese)duck_like_man = person()
watch_duck(duck_like_man)

运行结果:

I walk, i am a duck
i swim,i am a duck
i walk like a duck
i swim like a duck
this one walk like a duck
this one walk like a duck

从上面可以看出,只要有watch_duck函数接收这个类的对象,然后并没有检查对象的类型,而是直接调用这个对象的walk和swim方法,
从上面可以看出,python鸭子类型的灵活性在于它关注的是这个所调用的对象是如何被使用的,而没有关注对象类型的本身是什么

3.鸭子类型3

#  执行测试用例的类class BaseRun:def run(self):print("运作测试用例,生成txt格式的测试报告")class HtmlRun(BaseRun):def run(self):print("运作测试用例,生成HTML格式的测试报告")#
class XMLRun(BaseRun):def run(self):print("运作测试用例,生成XML格式的测试报告")
#
#
class JsonRun(BaseRun):def run(self):print("运作测试用例,生成JsonRun格式的测试报告")
#def main(obj: BaseRun):"""测试执行的启动函数"""# 此处省略若干行业务代码obj.run()if __name__ == '__main__':b_obj = BaseRun()main(b_obj)html_obj = HtmlRun()main(html_obj)json_obj = JsonRun()main(json_obj)xml_json = XMLRun()main(xml_json)

运行结果:

运作测试用例,生成txt格式的测试报告
运作测试用例,生成HTML格式的测试报告
运作测试用例,生成JsonRun格式的测试报告
运作测试用例,生成XML格式的测试报告

http://www.ppmy.cn/news/335881.html

相关文章

杰森斯坦森是机器人_杰森·斯坦森站台的品牌 赛麟究竟是什么

作者: johnny 2019-07-22/17:58 驱动中国2019年7月22日消息 近日,赛麟(SALEEN)在北京国家体育场鸟巢举办了一个发布会,国际影星杰森斯坦森到场站台,很多人就有疑问了,赛麟是个什么牌子,没听说过啊&#x…

python列表推导式练习

python列表推导式练习总结: 问题一 如何快速生成一个列表 [“data0”,“data1”,“data2”,“data3”,…,“data99”,] 问题二 如何快速生成一个列表[“data0”,“gy1”,“data2”,“gy3”,…,“data98”,“gy99”] 列表以下方法总结如代码: "&quo…

python常用的内置函数filter、map、eval、exec、all、all

python常用的内置函数 目录 一、filter 过滤函数二、map函数三、eval函数四、exec函数五、all函数六、 any函数 一、filter 过滤函数 filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表 # 实例1 取出列表中大于10的数 l…

测试开发面试题总结

测试开发面试题 1. 通过列表推导式完成下面数据类型转换。将 ["{‘a’:11,‘b’:2}", “[11,22,33,44]”] 转换为以下格式: li1 [{‘a’: 11, ‘b’: 2}, [11, 22, 33, 44]]2. Names[python,java,php,c,c,django,unittest,pytest,pymysql],请通过列表推导…

python搭建图书管理系统

一、项目介绍: 图书管理系统: 1.功能模块: 2.图书信息 二、环境准备 1.数据库的存储方式:mysql 2.通过云服务器安装一个mysql数据库,可参考博客 安装mysql数据库 3.登录数据库,创建一个表 create tab…

python的单例模式详解

一、什么是单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场 比如&#xff0…

BMW Series3/5/7

3-Series 第一代,E21,1975。有些许粗糙,过于简单。 第二代,E30,1984。最喜欢的一代,外观新颖大气。 第三代,E36,1991。外观开始变得有些现代了,介于复古和现代之间的产物…

2013年杰森·斯坦森动作《蜂鸟》720p.BD中英双字幕

2013年杰森斯坦森动作《蜂鸟》720p.BD中英双字幕 发布时间:2013-07-11 ◎译  名 蜂鸟 ◎片  名 Redemption/Hummingbird ◎年  代 2013 ◎国  家 美国/英国 ◎类  别 动作/惊悚 ◎语  言 英语 ◎字  幕 中英双字幕 ◎IMDB评分 6.3/10 from 4…