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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
简单使用Python自动生成文章
Dec 25 Python
python中zip和unzip数据的方法
May 27 Python
你应该知道的python列表去重方法
Jan 17 Python
深入理解Django中内置的用户认证
Oct 06 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
Java Unsafe类实现原理及测试代码
Sep 15 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
matplotlib bar()实现多组数据并列柱状图通用简便创建方法
Feb 24 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 文件状态缓存带来的问题
2008/12/14 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
2014/10/24 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
jquery密码强度校验
2015/12/02 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
Django模板继承 extend标签实例代码详解
2019/05/16 Javascript
详解Element-UI中上传的文件前端处理
2019/08/07 Javascript
JS代码检查工具ESLint介绍与使用方法
2020/02/04 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
8个非常实用的Vue自定义指令
2020/12/15 Vue.js
Python 内置函数complex详解
2016/10/23 Python
用Python设计一个经典小游戏
2017/05/15 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
基于python实现文件加密功能
2020/01/06 Python
10张动图学会python循环与递归问题
2021/02/06 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
驴妈妈旅游网:中国新型的B2C旅游电子商务网站
2016/08/16 全球购物
党课学习思想汇报
2014/01/02 职场文书
员工合理化建议书
2014/05/19 职场文书
八项规定个人对照检查材料思想汇报
2014/09/25 职场文书
PHP基本语法
2021/03/31 PHP
Redis中一个String类型引发的惨案
2021/07/25 Redis
Elasticsearch 基本查询和组合查询
2022/04/19 Python