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删除指定目录下过期文件的2个脚本分享
Apr 10 Python
探寻python多线程ctrl+c退出问题解决方案
Oct 23 Python
python从sqlite读取并显示数据的方法
May 08 Python
python列表操作之extend和append的区别实例分析
Jul 28 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
Python selenium 三种等待方式解读
Sep 15 Python
Django自定义分页效果
Jun 27 Python
python如何为创建大量实例节省内存
Mar 20 Python
python实现音乐下载的统计
Jun 20 Python
pytorch实现用Resnet提取特征并保存为txt文件的方法
Aug 20 Python
Python drop方法删除列之inplace参数实例
Jun 27 Python
Python lxml库的简单介绍及基本使用讲解
Dec 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实现的用户查询类实例
2015/06/18 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
PHP new static 和 new self详解
2017/02/19 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
深入理解JavaScript系列(10) JavaScript核心(晋级高手必读篇)
2012/01/15 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
js获取域名的方法
2015/01/27 Javascript
JavaScript中逗号运算符介绍及使用示例
2015/03/13 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
WEB开发之注册页面验证码倒计时代码的实现
2016/12/15 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
JQuery页面随滚动条动态加载效果的简单实现(推荐)
2017/02/08 Javascript
详解bootstrap用dropdown-menu实现上下文菜单
2017/09/22 Javascript
bootstrap fileinput插件实现预览上传照片功能
2018/01/23 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
vue实现通讯录功能
2018/07/14 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
vue-router懒加载的3种方式汇总
2021/02/28 Vue.js
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
python cv2在验证码识别中应用实例解析
2019/12/25 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
Pytorch中.new()的作用详解
2020/02/18 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
CSS3制作炫酷的自定义发光文字
2016/03/28 HTML / CSS
CSS3绘制超炫的上下起伏波动进度加载动画
2016/04/21 HTML / CSS
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
法制演讲稿
2014/09/10 职场文书
大学感恩节活动策划方案
2014/10/11 职场文书
工作自我推荐信范文
2015/03/25 职场文书
加班费申请报告
2015/05/15 职场文书
分家协议书范本
2016/03/22 职场文书
如何使JavaScript休眠或等待
2021/04/27 Javascript