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 相关文章推荐
pygame学习笔记(3):运动速率、时间、事件、文字
Apr 15 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
Python实现两个list对应元素相减操作示例
Jun 09 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
django创建最简单HTML页面跳转方法
Aug 16 Python
python实现输入任意一个大写字母生成金字塔的示例
Oct 27 Python
Python气泡提示与标签的实现
Apr 01 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
Pycharm调试程序技巧小结
Aug 08 Python
如何利用python检测图片是否包含二维码
Oct 15 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 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
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
海河写的 Discuz论坛帖子调用js的php代码
2007/08/23 PHP
分享十款最出色的PHP安全开发库中文详细介绍
2015/03/22 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
2020/03/26 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
javascript获取鼠标位置部分的实例代码(兼容IE,FF)
2013/08/05 Javascript
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
jQuery ajax的功能实现方法详解
2017/01/06 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
使用Electron构建React+Webpack桌面应用的方法
2017/12/15 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
详解小程序如何改变onLoad的执行时机
2019/11/01 Javascript
利用Python命令行传递实例化对象的方法
2016/11/02 Python
Python使用QQ邮箱发送Email的方法实例
2017/02/09 Python
在Python中使用AOP实现Redis缓存示例
2017/07/11 Python
关于Numpy中的行向量和列向量详解
2019/11/30 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
详解CSS3中Media Queries的相关使用
2015/07/17 HTML / CSS
html5构建触屏网站之touch事件介绍
2013/01/07 HTML / CSS
Chantelle仙黛尔内衣美国官网:法国第一品牌内衣
2018/07/26 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
2014年大学生党课心得体会范文
2014/03/29 职场文书
石油工程专业毕业生求职信
2014/04/13 职场文书
法制宣传教育方案
2014/05/09 职场文书
设备管理实施方案
2014/05/31 职场文书
承诺书模板
2014/08/30 职场文书
免职证明样本
2014/10/23 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
音乐研修感悟
2015/11/18 职场文书
领导干部学习三严三实心得体会
2016/01/05 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书