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 tensorflow基于cnn实现手写数字识别
Jan 01 Python
python使用wxpy轻松实现微信防撤回的方法
Feb 21 Python
NumPy 数组使用大全
Apr 25 Python
Python实现获取系统临时目录及临时文件的方法示例
Jun 26 Python
python利用wx实现界面按钮和按钮监听和字体改变的方法
Jul 17 Python
python Django的web开发实例(入门)
Jul 31 Python
如何为Python终端提供持久性历史记录
Sep 03 Python
Python集合操作方法详解
Feb 09 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
Python 在函数上添加包装器
Jul 28 Python
通过实例简单了解Python sys.argv[]使用方法
Aug 04 Python
一篇文章教你用python画动态爱心表白
Nov 22 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数组
2006/10/09 PHP
php的控制语句
2006/10/09 PHP
php编程实现获取excel文档内容的代码实例
2011/06/28 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
javascript实现的listview效果
2007/04/28 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
js加强的经典分页实例
2013/03/15 Javascript
JS动态获取当前时间,并写到特定的区域
2013/05/03 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
js实现跟随鼠标移动且带关闭功能的图片广告实例
2015/02/26 Javascript
浅谈jQuery.easyui的datebox格式化时间
2015/06/25 Javascript
Vue.js基础学习之class与样式绑定
2017/03/20 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
Vue中使用create-keyframe-animation与动画钩子完成复杂动画
2019/04/09 Javascript
node.js使用mongoose操作数据库实现购物车的增、删、改、查功能示例
2019/12/23 Javascript
使用AutoJs实现微信抢红包的代码
2020/12/31 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python统计字符串中指定字符出现次数的方法
2015/04/04 Python
Python的Flask框架的简介和安装方法
2015/11/13 Python
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
python安装sklearn模块的方法详解
2020/11/28 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
学习决心书
2014/03/11 职场文书
环保建议书500字
2014/05/14 职场文书
计生工作先进事迹
2014/08/15 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
2015暑期工社会实践报告
2015/07/13 职场文书
女方家长婚礼答谢词
2015/09/29 职场文书
基于Python实现的购物商城管理系统
2021/04/27 Python