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 相关文章推荐
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
详解python做UI界面的方法
Feb 27 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
Mar 09 Python
QML实现钟表效果
Jun 02 Python
Python 为什么推荐蛇形命名法原因浅析
Jun 18 Python
python文件及目录操作代码汇总
Jul 08 Python
python 装饰器的基本使用
Jan 13 Python
python生成随机数、随机字符、随机字符串
Apr 06 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中的Streams详细介绍
2014/11/12 PHP
php创建session的方法实例详解
2015/01/27 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
Yii2验证器(Validator)用法分析
2016/07/23 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
Kibo 用于处理键盘事件的Javascript工具库
2011/10/28 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
JS this作用域以及GET传输值过长的问题解决方法
2013/08/06 Javascript
JavaScript中的small()方法使用详解
2015/06/08 Javascript
Highcharts 多个Y轴动态刷新数据的实现代码
2016/05/28 Javascript
详解vue+vueRouter+webpack的简单实例
2017/06/17 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
js实现页面图片消除效果
2020/03/24 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
Vue实现点击当前行变色
2020/12/14 Vue.js
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
python将xml xsl文件生成html文件存储示例讲解
2013/12/03 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
Python中time模块和datetime模块的用法示例
2016/02/28 Python
Python3爬楼梯算法示例
2019/03/04 Python
Python配置文件处理的方法教程
2019/08/29 Python
django创建简单的页面响应实例教程
2019/09/06 Python
python3实现往mysql中插入datetime类型的数据
2020/03/02 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
玩具反斗城美国官网:Toys"R"Us
2016/09/17 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
IMPORT的选项IGNORE有什么作用?缺省是什么设置?
2015/09/17 面试题
Linux常见面试题
2016/10/04 面试题
历史专业学生的自我评价
2014/02/28 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang