利用闭包把Python函数当类使
2010-08-11 10:13
507 查看
利用闭包可以实现把Python的函数当作类来使用的功能。
看一个简单的例子:
'''
Created
on 2010-8-10
@author:
Edward
Shen
shendl_s@hotmail.com
'''
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的函数甚至都不是独立与类的。
我觉得,函数式编程的重要一项就是把数据和函数集中在一个函数而不是类中。 所有语言都需要模块化,不是吗?
看一个简单的例子:
'''
Created
on 2010-8-10
@author:
Edward
Shen
shendl_s@hotmail.com
'''
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]
repr(method)
return
method
return
dispatch
if
__name__
==
'__main__':
user=User({"name":"shendl"})
user("getName")()
user("setName")("Edward")
user("getName")()
user("name")()
#user2=User("shendl")
pass
说明:
1,利用Python支持函数闭包的特性实现了用函数当作类的功能。
2,局部变量
methods用于匹配所有公共函数。
3,User函数返回的也是一个函数—dispatch。它的作用是读取字符串参数,返回匹配的内部函数,或者抛出一个异常。
这里仅是示例,更好的方法是捕获异常后返回一个None给调用方。
4,dispatch返回的也是函数。用户再加上参数进行最终的调用。
上面的函数具备了Class的所有功能,除了继承。
但是继承实际上是OOP中最不重要的功能。我们可以使用一个变量,该变量是需要继承的类/函数的实例,然后通过它实现我们需要继承的函数即可。 忘了这在设计模式里叫什么了,反正设计模式里有这个技巧。
用函数模拟类的功能,可以在所有函数式编程语言中实现,包括Lisp,Erlang,甚至JavaScript也可以。但Ruby不行。Ruby的函数甚至都不是独立与类的。
我觉得,函数式编程的重要一项就是把数据和函数集中在一个函数而不是类中。 所有语言都需要模块化,不是吗?
相关文章推荐
- Python学习笔记——利用闭包写递增函数
- 利用python闭包性质写只用函数来写一个类
- 如何利用Python里面的json中的dump()/dumps()函数处理中文
- Python函数中的函数(闭包)用法实例
- python 装饰器、内部函数、闭包简单理解
- python之 利用字典与函数实现switch case功能
- python中对 函数 闭包 的理解
- Python3 基本语法四 函数 匿名函数 闭包
- Python 函数式编程(高阶函数、把函数作为参数、map()函数、reduce()函数、filter()函数、自定义排序函数、函数返回函数、闭包、匿名函数、装饰器decorator)
- 实例讲解Python的函数闭包使用中应注意的问题
- Python 利用装饰器检测函数参数
- python之 利用字典与函数实现switch case功能
- Python 切片:利用切片操作,实现一个trim()函数,去除字符串首尾的空格
- Python函数中的函数(闭包)用法实例
- Python 语法知识 --函数,闭包
- Python中函数的闭包
- 利用ida python 实现复原函数调用的参数 (仅对数据被简单硬编码有效)
- 【python】*函数:全局局部变量、内部函数、闭包
- python基础学习之函数(2)-内嵌函数和闭包
- 利用python的eval()函数实现控制台计算器,并使用pyinstaller打包exe