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程序设计有所帮助。

(0)

相关推荐

  • Python常见工厂函数用法示例

    本文实例讲述了Python常见工厂函数用法.分享给大家供大家参考,具体如下: 工厂函数:能够产生类实例的内建函数. 工厂函数是指这些内建函数都是类对象, 当调用它们时,实际上是创建了一个类实例. python中的工厂函数举例如下: 1>int(),long(),float(),complex(),bool() >>> a=int(9.9) >>> a 9 >>> b=long(45) >>> b 45L >>>

  • Python入门篇之函数

    Pythond 的函数是由一个新的语句编写,即def,def是可执行的语句--函数并不存在,直到Python运行了def后才存在. 函数是通过赋值传递的,参数通过赋值传递给函数 def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: 复制代码 代码如下: def function_name(arg1,arg2[,...]):     statement [return value] 返回值不是必须的,如果没有return语句,则Python默认返回值None. 函数名的命

  • python进阶教程之函数参数的多种传递方法

    我们已经接触过函数(function)的参数(arguments)传递.当时我们根据位置,传递对应的参数.我们将接触更多的参数传递方式. 回忆一下位置传递: 复制代码 代码如下: def f(a,b,c):     return a+b+c print(f(1,2,3)) 在调用f时,1,2,3根据位置分别传递给了a,b,c. 关键字传递 有些情况下,用位置传递会感觉比较死板.关键字(keyword)传递是根据每个参数的名字传递参数.关键字并不用遵守位置的对应关系.依然沿用上面f的定义,更改调用

  • Python内置的字符串处理函数整理

    str='python String function' 生成字符串变量str='python String function' 字符串长度获取:len(str)例:print '%s length=%d' % (str,len(str)) 字母处理全部大写:str.upper()全部小写:str.lower()大小写互换:str.swapcase()首字母大写,其余小写:str.capitalize()首字母大写:str.title()print '%s lower=%s' % (str,st

  • Python help()函数用法详解

    help函数是python的一个内置函数(python的内置函数可以直接调用,无需import),它是python自带的函数,任何时候都可以被使用.help函数能作什么.怎么使用help函数查看python模块中函数的用法,和使用help函数时需要注意哪些问题,下面来简单的说一下. 一.help()函数的作用在使用python来编写代码时,会经常使用python自带函数或模块,一些不常用的函数或是模块的用途不是很清楚,这时候就需要用到help函数来查看帮助.这里要注意下,help()函数是查看函

  • python中的一些类型转换函数小结

    函数                         描述int(x [,base ])              将x转换为一个整数long(x [,base ])             将x转换为一个长整数float(x )                    将x转换到一个浮点数complex(real [,imag ])       创建一个复数str(x )                      将对象 x 转换为字符串repr(x )                    

  • Python def函数的定义、使用及参数传递实现代码

    Python编程中对于某些需要重复调用的程序,可以使用函数进行定义,基本形式为: def 函数名(参数1, 参数2, --, 参数N): 执行语句函数名为调用的表示名,参数则是传入的参数,可以更具需要定义,也可以没有. # 例1:简单的函数使用 # coding=gb2312 # 定义函数 def hello(): print 'hello python!' # 调用函数 hello() >>> hello python! 函数可以带参数和返回值,参数将按从左到右的匹配,参数可设置默认值

  • python 动态获取当前运行的类名和函数名的方法

    一.使用内置方法和修饰器方法获取类名.函数名 python中获取函数名的情况分为内部.外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性 复制代码 代码如下: def a():passa.__name__ 除此之外还可以: 复制代码 代码如下: getattr(a,'__name__') 尽管有些脱裤子放屁,总之,从外部获取的方法是非常灵活的. 有些同学需要从函数内部获取函数本身的名字,就需要用些技巧了.1.使用sys模块的方法: 复制代码 代码如下: def a():pr

  • 详解Python中映射类型的内建函数和工厂函数

    1.基本函数介绍 (1)标准类型函数[type().str()和 cmp()]         对一个字典调用type()工厂方法,会返回字典类型:"<type 'dict'>".调用str()工厂方法将返回该字典的字符串表示形式.         字典是通过这样的算法来比较的:首先是字典的大小,然后是键,最后是值.可是用cmp()做字典的比较一般不是很有用. 算法按照以下的顺序: 首先比较字典长度         如果字典的长度不同,那么用cmp(dict1, dict2

  • Python工厂函数用法实例分析

    本文实例讲述了Python工厂函数用法.分享给大家供大家参考,具体如下: 参考了很多代码.别人的文章以及书籍,最后自己做了适合自己理解的一种理解总结方式. 很多人说,工厂函数看上去像函数,其实是类.我觉得这种方法有些牵强,虽说在OOP中Python有其自己对类以及对象的定义.在一定程度上这么说是可以的. 我个人的理解,既然叫做工厂函数,那么这一定是一个函数.不过,看了许多例子后发现,其实工厂函数基本上都是带有返回对象的.而这些返回对象则是通过调用一种或者多种类来创建的对象. 例如,有如下代码:

  • Python iter()函数用法实例分析

    本文实例讲述了Python iter()函数用法.分享给大家供大家参考,具体如下: python中的迭代器用起来非常灵巧,不仅可以迭代序列,也可以迭代表现出序列行为的对象,例如字典的键.一个文件的行,等等. 迭代器就是有一个next()方法的对象,而不是通过索引来计数.当使用一个循环机制需要下一个项时,调用迭代器的next()方法,迭代完后引发一个StopIteration异常. 但是迭代器只能向后移动.不能回到开始.再次迭代只能创建另一个新的迭代对象. 反序迭代工具:reversed()将返回

  • Python callable()函数用法实例分析

    本文实例讲述了Python callable()函数用法.分享给大家供大家参考,具体如下: python中的内建函数callable( ) ,可以检查一个对象是否是可调用的 . 对于函数, 方法, lambda 函数式, 类, 以及实现了 _ _call_ _ 方法的类实例, 它都返回 True. >>> help(callable) Help on built-in function callable in module __builtin__: callable(...) calla

  • python回调函数用法实例分析

    本文实例讲述了python回调函数用法.分享给大家供大家参考.具体分析如下: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用是一种阻塞式调用,调用方要等待对方执行完毕 才返回,它是一种单向调用:回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口:异步调用是一种类似消息或事件的机制,不过它 的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口).回调和异步调用的关系非常紧密

  • Flask框架工厂函数用法实例分析

    本文实例讲述了Flask框架工厂函数用法.分享给大家供大家参考,具体如下: 在我们开始学习FLask的时候,创建应用的实例是用app=Flask(name)来做的,但是当我们想创建多个不同配置的实例的时候咋办呢,每次都要改是不是很烦,那为了减少麻烦,我们可以采用调用一个create_app函数来返回应用实例的方法,这就是工厂方法的大概意思啦! 文字说的再多也难以帮助理解,看代码示例: 1.最初的写法 #__init__.py里面创建实例,应用实例对象创建完再引入视图函数的模块,因为这时候视图函数

  • Python zip()函数用法实例分析

    本文实例讲述了Python zip()函数用法.分享给大家供大家参考,具体如下: 这里介绍python中zip()函数的使用: >>> help(zip) Help on built-in function zip in module __builtin__: zip(...) zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)] Return a list of tuples, where each tuple c

  • python匿名函数用法实例分析

    本文实例讲述了python匿名函数用法.分享给大家供大家参考,具体如下: 匿名函数特点: 1.只能有一个表达式 2.不用return,默认return结果 3.不需要名字,防止函数名重复 4.是对象,可赋值给一个变量 经典例子 >>> map(lambda x : x*x, [2, 4, 8, 9]) [4, 16, 64, 81] python匿名函数lambda格式: lambda 参数(可以有默认值) : 表达式 # 无参 >>> lambda : 'hello

  • python scatter函数用法实例详解

    这篇文章主要介绍了python scatter函数用法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数功能:寻找变量之间的关系. 调用签名:plt.scatter(x, y, c="b", label="scatter figure") x: x轴上的数值 y: y轴上的数值 c:散点图中的标记的颜色 label:标记图形内容的标签文本 代码实现: import matplotlib.pyplot as

  • Python回调函数用法实例详解

    本文实例讲述了Python回调函数用法.分享给大家供大家参考.具体分析如下: 一.百度百科上对回调函数的解释: 回调函数就是一个通过函数指针调用的函数.如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数.回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应. 二.什么是回调: 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用.回调和异步调用.同步调用

  • Python反射的用法实例分析

    本文实例讲述了Python反射的用法.分享给大家供大家参考,具体如下: 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或变量是否存在,这是我们需要用一个特殊的方法或机制要访问和操作这个未知的方法或变量,这中机制就称之为反射.接下记录下反射几个重要方法: hasattr 判断对象中是否有这个方法或变量 class Person(object): def __init__(self,name): self.name

随机推荐