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各大聊天系统的屏蔽脏话功能原理
Dec 01 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
Django中ajax发送post请求 报403错误CSRF验证失败解决方案
Aug 13 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
python多项式拟合之np.polyfit 和 np.polyld详解
Feb 18 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python3读取和写入excel表格数据的示例代码
Jun 09 Python
python自动化测试通过日志3分钟定位bug
Nov 20 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 和 MySQL 基础教程(一)
2006/10/09 PHP
用PHP读取超大文件的实例代码
2012/04/01 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
php header函数的常用http头设置
2015/06/25 PHP
如何在PHP中生成随机数
2020/06/04 PHP
IE与FireFox中的childNodes区别
2011/10/20 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
2013/11/26 Javascript
用js判断是否为360浏览器的实现代码
2015/01/15 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
微信小程序-图片、录音、音频播放、音乐播放、视频、文件代码实例
2016/11/22 Javascript
Javascript之图片的延迟加载的实例详解
2017/07/24 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
NodeJS 将文件夹按照存放路径变成一个对应的JSON的方法
2018/10/17 NodeJs
微信小程序实现星星评价效果
2018/11/02 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
python读取word文档的方法
2015/05/09 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
python实现定时发送qq消息
2019/01/18 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
WxPython建立批量录入框窗口
2019/02/27 Python
Django多数据库的实现过程详解
2019/08/01 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
英国伦敦的睡衣品牌:Asceno
2019/10/06 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
小学教育见习报告
2014/10/31 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
毕业生就业推荐表导师评语
2014/12/31 职场文书
感谢信模板大全
2015/01/23 职场文书
幼儿园教师个人总结
2015/02/05 职场文书
师德师风心得体会(2016精选篇)
2016/01/12 职场文书
pycharm代码删除恢复的方法
2021/06/26 Python
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers