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 循环语句(for、while、break、range等)
Nov 20 Python
Python实现字典按照value进行排序的方法分析
Dec 23 Python
python隐藏终端执行cmd命令的方法
Jun 24 Python
python文件选择对话框的操作方法
Jun 27 Python
Django高级编程之自定义Field实现多语言
Jul 02 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
Python对象的属性访问过程详解
Mar 05 Python
详解python命令提示符窗口下如何运行python脚本
Sep 11 Python
Python中random模块常用方法的使用教程
Oct 04 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实现显示照片exif信息的方法
2014/07/11 PHP
PHP获取当前页面URL函数实例
2014/10/22 PHP
codeigniter发送邮件并打印调试信息的方法
2015/03/21 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
学习PHP Cookie处理函数
2016/08/09 PHP
ThinkPHP5.0多个文件上传后找不到临时文件的修改方法
2018/07/30 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
JQuery扩展插件Validate 5添加自定义验证方法
2011/09/05 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
JavaScript比较当前时间是否在指定时间段内的方法
2016/08/02 Javascript
js初始化验证实例详解
2016/11/26 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
vue实现表格数据的增删改查
2017/07/10 Javascript
解决JQuery全选/反选第二次失效的问题
2017/10/11 jQuery
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
python3写的简单本地文件上传服务器实例
2018/06/04 Python
django之跨表查询及添加记录的示例代码
2018/10/16 Python
在python中利用KNN实现对iris进行分类的方法
2018/12/11 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python提取照片坐标信息的实例代码
2019/08/14 Python
使用Python操作ArangoDB的方法步骤
2020/02/02 Python
基于python代码批量处理图片resize
2020/06/04 Python
python支持多继承吗
2020/06/19 Python
python 19个值得学习的编程技巧
2020/08/15 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
阿巴庭院:Abba Patio
2019/06/18 全球购物
保密工作承诺书
2014/08/29 职场文书
大一新生期末自我评价
2014/09/12 职场文书
项目委托协议书(最新)
2014/09/13 职场文书
JavaScript实现简单图片切换
2021/04/29 Javascript
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js