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继承问题
May 29 Python
python处理html转义字符的方法详解
Jul 01 Python
快速入门python学习笔记
Dec 06 Python
Python编程实现线性回归和批量梯度下降法代码实例
Jan 04 Python
TensorFlow实现简单卷积神经网络
May 24 Python
浅谈python图片处理Image和skimage的区别
Aug 04 Python
python获取Linux发行版名称
Aug 30 Python
Python中生成一个指定长度的随机字符串实现示例
Nov 06 Python
pytorch 归一化与反归一化实例
Dec 31 Python
Python验证码截取识别代码实例
May 16 Python
Python中Qslider控件实操详解
Feb 20 Python
python 定义函数 返回值只取其中一个的实现
May 21 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中操作ini配置文件的方法
2013/04/25 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
javascript 写类方式之一
2009/07/05 Javascript
jQuery 自动增长的文本输入框实现代码
2010/04/02 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
2013/12/27 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
浅析Node在构建超媒体API中的作用
2014/07/30 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
浅析JSONP技术原理及实现
2016/06/08 Javascript
同步文本框内容JS代码实现
2016/08/04 Javascript
详解AngularJs中$sce与$sceDelegate上下文转义服务
2016/09/21 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
vue组件发布到npm简单步骤
2017/11/30 Javascript
Gulp实现静态网页模块化的方法详解
2018/01/09 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
2016/07/12 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
python代码区分大小写吗
2020/06/17 Python
最新PyCharm从安装到PyCharm永久激活再到PyCharm官方中文汉化详细教程
2020/11/17 Python
python基于win32api实现键盘输入
2020/12/09 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
高一历史教学反思
2014/01/13 职场文书
学校师德承诺书
2014/05/23 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2015年党员创先争优承诺书
2015/01/22 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
Android超详细讲解组件ScrollView的使用
2022/03/31 Java/Android
深入理解 Golang 的字符串
2022/05/04 Golang