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删除文件示例分享
Jan 28 Python
关于django 数据库迁移(migrate)应该知道的一些事
May 27 Python
Python Logging 日志记录入门学习
Jun 02 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
Django网络框架之创建虚拟开发环境操作示例
Jun 06 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
Python如何实现强制数据类型转换
Nov 22 Python
python 画3维轨迹图并进行比较的实例
Dec 06 Python
浅析matlab中imadjust函数
Feb 27 Python
python线程池如何使用
May 28 Python
python lambda的使用详解
Feb 26 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 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 session有效期问题
2009/04/26 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
2016/05/12 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
2016/10/25 PHP
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
Prototype源码浅析 Number部分
2012/01/16 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
javascript实现限制上传文件大小
2015/02/06 Javascript
js实现对table动态添加、删除和更新的方法
2015/02/10 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
thinkjs之页面跳转同步异步操作
2017/02/05 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
extjs简介_动力节点Java学院整理
2017/07/17 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
2018/03/13 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
python链接Oracle数据库的方法
2015/06/28 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
Tensorflow 实现修改张量特定元素的值方法
2018/07/30 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Python按钮的响应事件详解
2019/03/04 Python
python SocketServer源码深入解读
2019/09/17 Python
python中str内置函数用法总结
2020/12/27 Python
授权委托书公证
2014/09/14 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
小学教师先进事迹材料
2014/12/15 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
工作服管理制度范本
2015/08/06 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
浅谈JavaScript作用域
2021/12/06 Javascript
Python中的 No Module named ***问题及解决
2022/07/23 Python