Python工厂函数用法实例分析

 更新时间:2018年05月14日 08:57:24   作者:grey_csdn  
这篇文章主要介绍了Python工厂函数用法,结合实例形式分析了Python工厂函数的概念、功能、使用方法及相关注意事项,需要的朋友可以参考下

本文实例讲述了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数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python实现打砖块小游戏代码实例

    Python实现打砖块小游戏代码实例

    这篇文章主要介绍了Python打砖块小游戏,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • Python 转换RGB颜色值的示例代码

    Python 转换RGB颜色值的示例代码

    这篇文章主要介绍了Python 转换RGB颜色值的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • python判断单向链表是否包括环,若包含则计算环入口的节点实例分析

    python判断单向链表是否包括环,若包含则计算环入口的节点实例分析

    这篇文章主要介绍了python判断单向链表是否包括环,若包含则计算环入口的节点,结合实例形式分析了Python针对单向链表的遍历、判断相关算法原理与使用技巧,需要的朋友可以参考下
    2019-10-10
  • python使用装饰器作日志处理的方法

    python使用装饰器作日志处理的方法

    今天小编就为大家分享一篇python使用装饰器作日志处理的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子

    Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子

    今天小编就为大家分享一篇Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • 在Python中使用MySQL--PyMySQL的基本使用方法

    在Python中使用MySQL--PyMySQL的基本使用方法

    PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。这篇文章主要介绍了在Python中使用MySQL--PyMySQL的基本使用,需要的朋友可以参考下
    2019-11-11
  • opencv调整图像亮度对比度的示例代码

    opencv调整图像亮度对比度的示例代码

    本文通过实例代码给大家介绍了opencv调整图像亮度对比度,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • JS设计模式之责任链模式实例详解

    JS设计模式之责任链模式实例详解

    这篇文章主要介绍了JS设计模式之责任链模式,结合实例形式详细分析了责任链模式的概念、原理、功能、使用场景及相关操作技巧,需要的朋友可以参考下
    2018-02-02
  • Python接口自动化测试框架运行原理及流程

    Python接口自动化测试框架运行原理及流程

    这篇文章主要介绍了Python接口自动化测试框架运行原理及流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python正则表达式实现自动化编程

    python正则表达式实现自动化编程

    这篇文章主要介绍了python正则表达式实现自动化编程,re模块的compile()方法是构成正则表达式的方法,向compile()传入一个字符串表示正则表达式,该方法返回一个Regex模式的对象,需要的朋友可以参考下
    2023-01-01

最新评论