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 自动补全(vim)
Nov 30 Python
实例解析Python中的__new__特殊方法
Jun 02 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
Jun 14 Python
itchat接口使用示例
Oct 23 Python
Python下载网络小说实例代码
Feb 03 Python
python编写弹球游戏的实现代码
Mar 12 Python
Python+Django搭建自己的blog网站
Mar 13 Python
使用django的objects.filter()方法匹配多个关键字的方法
Jul 18 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
Python多线程爬取豆瓣影评API接口
Oct 22 Python
python海龟绘图之画国旗实例代码
Nov 11 Python
如何用Django处理gzip数据流
Jan 29 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
基于OpenCV的PHP图像人脸识别技术
2009/10/11 PHP
PHP中“简单工厂模式”实例代码讲解
2012/09/04 PHP
PHP 观察者模式的实现代码
2013/05/10 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
PHP中PDO的事务处理分析
2016/04/07 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
jQuery 表格工具集
2010/04/25 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
跟老齐学Python之传说中的函数编写条规
2014/10/11 Python
Python编程判断一个正整数是否为素数的方法
2017/04/14 Python
python版百度语音识别功能
2019/07/09 Python
python requests指定出口ip的例子
2019/07/25 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
详解python如何引用包package
2020/06/07 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
python操作链表的示例代码
2020/09/27 Python
Django生成数据库及添加用户报错解决方案
2020/10/09 Python
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
离婚协议书范文2014
2014/10/16 职场文书
公司员工奖惩制度
2015/08/04 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android
利用js实现简单开关灯代码
2021/11/23 Javascript
python+pytest接口自动化之token关联登录的实现
2022/04/06 Python
SQL bool盲注和时间盲注详解
2022/07/23 SQL Server