文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>利用闭包把python函数当类使...

利用闭包把python函数当类使...

时间:2010-08-10  来源:shendl

       利用闭包可以实现把Python的函数当作类来使用的功能。

看一个简单的例子:


'''

Created on 2010-8-10

@author: Edward Shen [email protected]

'''

def User(params):

if(not isinstance(params,type({}))):

raise TypeError("params must be dict!")

methods={}

def getName():

return params["name"]

methods["getName"]=getName

def setName(newName):

params["name"]=newName

methods["setName"]=setName

def dispatch(methodName):

method= methods[methodName]

print repr(method)

return method

return dispatch


if __name__ == '__main__':

user=User({"name":"shendl"})

print user("getName")()

user("setName")("Edward")

print user("getName")()

#print user("name")()

#user2=User("shendl")

pass


说明:

1,利用Python支持函数闭包的特性实现了用函数当作类的功能。

2,局部变量 methods用于匹配所有公共函数。

3,User函数返回的也是一个函数—dispatch。它的作用是读取字符串参数,返回匹配的内部函数,或者抛出一个异常。

这里仅是示例,更好的方法是捕获异常后返回一个None给调用方。

4,dispatch返回的也是函数。用户再加上参数进行最终的调用。

       上面的函数具备了Class的所有功能,除了继承。

       但是继承实际上是OOP中最不重要的功能。我们可以使用一个变量,该变量是需要继承的类/函数的实例,然后通过它实现我们需要继承的函数即可。   忘了这在设计模式里叫什么了,反正设计模式里有这个技巧。


    用函数模拟类的功能,可以在所有函数式编程语言中实现,包括Lisp,Erlang,甚至JavaScript也可以。但Ruby不行。Ruby的函数甚至都不是独立与类的。

 

    我觉得,函数式编程的重要一项就是把数据和函数集中在一个函数而不是类中。   所有语言都需要模块化,不是吗?

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载