Python工厂函数用法实例分析


Posted in Python onMay 14, 2018

本文实例讲述了Python工厂函数用法。分享给大家供大家参考,具体如下:

参考了很多代码、别人的文章以及书籍,最后自己做了适合自己理解的一种理解总结方式。

很多人说,工厂函数看上去像函数,其实是类。我觉得这种方法有些牵强,虽说在OOP中Python有其自己对类以及对象的定义。在一定程度上这么说是可以的。

我个人的理解,既然叫做工厂函数,那么这一定是一个函数。不过,看了许多例子后发现,其实工厂函数基本上都是带有返回对象的。而这些返回对象则是通过调用一种或者多种类来创建的对象。

例如,有如下代码:

#!/usr/bin/python
class Card:
    def __init__(self,rank,suit):
       self.suit = suit
       self.rank = rank
       self.hard,self.soft =self._points()
classNumberCard(Card):
    def _points(self):
       returnint(self.rank),int(self.rank)
classAceCard(Card):
    def _points(self):
       return 1,11
classFaceCard(Card):
    def _points(self):
       return 10,10
class Suit:
    def __init__(self,name,symbol):
       self.name = name
       self.symbol = symbol
defcard(rank,suit):
    if rank == 1:
       return AceCard('A',suit)
    elif 2 <= rank < 11:
       return NumberCard(str(rank),suit)
    elif 11 <= rank < 14:
       name ={11:'J',12:'Q',13:'K'}[rank]
       return FaceCard(name,suit)
    else:
       raise Exception("Rank out ofrange")

上面代码中的card其实就是通过调用各种类来创建对象,而这个函数就是一个工厂函数。这种函数的设计,通常是为了满足批量创建大量的对象或实例而创建。比如,创建所有的扑克牌对象可以通过如下代码:

Club,Diamond,Heart,Spade=Suit('Club','CCC'),Suit('Diamond','DDD'),Suit('Heart','HHH'),Suit('Spade','SSS')
deck =[card(rank,suit)
    for rank in range(1,14)
       for suit in(Club,Diamond,Heart,Spade)]

上面的代码,首先创建了不同的花色,然后通过复合for语句创建了整套扑克牌。如果简化一些,自然也可以把花色存储到一个专门的元组或者列表中增强一下可读性。

以上是我自己通过不同的资料、文档、书籍以及代码示例总结出的Python中工厂函数的理解以及使用方式。应该没有太大偏差了吧?如果有的话,后续继续纠正吧,毕竟学习本身应该是一条曲折的路线。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
python通过smpt发送邮件的方法
Apr 30 Python
Python的Django框架中if标签的相关使用
Jul 15 Python
详解使用python的logging模块在stdout输出的两种方法
May 17 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
python判断字符串是否是json格式方法分享
Nov 07 Python
Python中defaultdict与lambda表达式用法实例小结
Apr 09 Python
Python Grid使用和布局详解
Jun 30 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
Jul 04 Python
余弦相似性计算及python代码实现过程解析
Sep 18 Python
Python web如何在IIS发布应用过程解析
May 27 Python
Python reversed反转序列并生成可迭代对象
Oct 22 Python
windows下添加Python环境变量的方法汇总
May 14 #Python
Django实现全文检索的方法(支持中文)
May 14 #Python
如何用python整理附件
May 13 #Python
Python基于dom操作xml数据的方法示例
May 12 #Python
Python实现使用卷积提取图片轮廓功能示例
May 12 #Python
在cmd中运行.py文件: python的操作步骤
May 12 #Python
对命令行模式与python交互模式介绍
May 12 #Python
You might like
PHP定时更新程序设计思路分享
2014/06/10 PHP
php自定义分页类完整实例
2015/12/25 PHP
zend框架实现支持sql server的操作方法
2016/12/08 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
js的Prototype属性解释及常用方法
2014/05/08 Javascript
javascript的理解及经典案例分析
2016/05/20 Javascript
浅析Nodejs npm常用命令
2016/06/14 NodeJs
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
VUE element-ui 写个复用Table组件的示例代码
2017/11/18 Javascript
Angular学习笔记之集成三方UI框架、控件的示例
2018/03/23 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
详解Angular路由之路由守卫
2018/05/10 Javascript
深入理解react-router 路由的实现原理
2018/09/26 Javascript
Vue内部渲染视图的方法
2019/09/02 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
JavaScript中数组去重的5种方法
2020/07/04 Javascript
浅谈Python中的数据类型
2015/05/05 Python
python利用datetime模块计算时间差
2015/08/04 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
Python 错误和异常代码详解
2018/01/29 Python
Python中正则表达式的用法总结
2019/02/22 Python
python爬虫爬取微博评论案例详解
2019/03/27 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Django用户认证系统 User对象解析
2019/08/02 Python
详解python方法之绑定方法与非绑定方法
2020/08/17 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
SVG实现多彩圆环倒计时效果的示例代码
2017/11/21 HTML / CSS
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
学徒工职责
2014/03/06 职场文书
Vue3中toRef与toRefs的区别
2022/03/24 Vue.js
Elasticsearch 批量操作
2022/04/19 Python