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的Tornado框架对子域名和泛域名的支持
May 02 Python
基于Python实现一个简单的银行转账操作
Mar 06 Python
Python图算法实例分析
Aug 13 Python
用python实现k近邻算法的示例代码
Sep 06 Python
Python实现二叉树前序、中序、后序及层次遍历示例代码
May 18 Python
python使用paramiko模块通过ssh2协议对交换机进行配置的方法
Jul 25 Python
django-初始配置(纯手写)详解
Jul 30 Python
python 模拟创建seafile 目录操作示例
Sep 26 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
关于python中remove的一些坑小结
Jan 04 Python
python绘制云雨图raincloud plot
Aug 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
php 提速工具eAccelerator 配置参数详解
2010/05/16 PHP
jQuery 源码分析笔记
2011/05/25 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
php生成excel列序号代码实例
2013/12/24 PHP
ThinkPHP3.1新特性之多层MVC的支持
2014/06/19 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
谈谈JSON对象和字符串之间的相互转换JSON.stringify(obj)和JSON.parse(string)
2015/10/01 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
JS装饰器函数用法总结
2018/04/21 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
2019/07/17 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Python单例模式的四种创建方式实例解析
2020/03/04 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
Python fileinput模块如何逐行读取多个文件
2020/10/05 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
2020/11/10 Python
python跨文件使用全局变量的实现
2020/11/17 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
客服主管岗位职责
2013/12/13 职场文书
金融行业职业生涯规划范文
2014/01/17 职场文书
四年级语文教学反思
2014/02/05 职场文书
实习协议书范本
2014/04/22 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
社区服务标语
2014/07/01 职场文书
我的中国梦演讲稿600字
2014/08/19 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
nginx location中多个if里面proxy_pass的方法
2021/03/31 Servers
基于Go Int转string几种方式性能测试
2021/04/28 Golang