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字典key不能是可以是啥类型

    python字典key不能是可以是啥类型

    在本篇文章里小编给大家整理了关于python字典key不能是可以是啥类型的相关知识点,需要的朋友们可以参考下。
    2020-08-08
  • python 三种方法提取pdf中的图片

    python 三种方法提取pdf中的图片

    这篇文章主要介绍了python 三种方法提取pdf中的图片,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-02-02
  • Python轻松搞定视频剪辑重复性工作问题

    Python轻松搞定视频剪辑重复性工作问题

    这篇文章主要介绍了Python轻松搞定视频剪辑重复性工作问题,大家做视频剪辑的时候,还在重复性工作吗?今天,小编来教大家如何利用Python帮你搞定这些重复性的剪辑工作,需要的朋友可以参考一下
    2021-12-12
  • python创建生成器以及访问的方法详解

    python创建生成器以及访问的方法详解

    这篇文章主要介绍了python创建生成器以及访问的方法详解,与列表一次性地将数据全都加载到内存不同的是,生成器使用推断加载数据,每次只推断出一个对象,在数据量比较大时,可以节省内存,需要的朋友可以参考下
    2023-11-11
  • 玩转Python发短信的实现

    玩转Python发短信的实现

    用Python实现发短信功能,当监控到问题出现时,短信报警,使问题能得到及时的处理。当然,我相信,用Python发短信应用场景不止此一处,下面我们开始Python发短信的实现,感兴趣的朋友参考下吧
    2022-01-01
  • python制作爬虫爬取京东商品评论教程

    python制作爬虫爬取京东商品评论教程

    本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计图表,非常的细致,有需要的小伙伴可以参考下
    2016-12-12
  • matplotlib如何设置坐标轴刻度的个数及标签的方法总结

    matplotlib如何设置坐标轴刻度的个数及标签的方法总结

    这里介绍两种设置坐标轴刻度的方法,一种是利用pyplot提交的api去进行设置,另一种是通过调用面向对象的api, 即通过matplotlib.axes.Axes去设置,需要的朋友可以参考下
    2021-06-06
  • Python实现调用摄像头拍摄照片

    Python实现调用摄像头拍摄照片

    这篇文章主要为大家详细介绍了如何利用Python实现调用摄像头拍摄照片以及邮箱收集功能,文中的示例代码讲解详细,感兴趣的可以动手尝试一下
    2022-06-06
  • Python读取mat(matlab数据文件)并实现画图

    Python读取mat(matlab数据文件)并实现画图

    这篇文章主要介绍了Python读取mat(matlab数据文件)并实现画图问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • python 专题九 Mysql数据库编程基础知识

    python 专题九 Mysql数据库编程基础知识

    在Python网络爬虫中,通常是通过TXT纯文本方式存储,其实也是可以存储在数据库中的;同时在WAMP(Windows、Apache、MySQL、PHP或Python)开发网站中,也可以通过Python构建网页的,所以这篇文章主要讲述Python调用MySQL数据库相关编程知识
    2017-03-03

最新评论