深入 PEAK 的新特性
2007-03-29 12:16:36 来源:WEB开发网核心提示: 当然,在 Python 中我们可以通过 class 语句来创建自己的类型,深入 PEAK 的新特性(4),并在喜欢的层次中安插自己的类型,不过现在,我们通常并不关心对象是什么;只要它的味道像鸭子一样好就行了,Python 会很高兴地在品尝鸭子的氛围中把它吃下,我们仍然可以强制搜集某个特定的
当然,在 Python 中我们可以通过 class 语句来创建自己的类型,并在喜欢的层次中安插自己的类型。不过现在,我们仍然可以强制搜集某个特定的类所持有的值。类 IntBetween3And17 在 Python 中并不太难以实现;如果您试图在一个更加受限的类的对象上添加 100,那么返回更加通用的 IntBetween0And1000 的一个实例也不难。
PEAK 的 dispatch 模块所做的是(Eby 和其他贡献者可能这样想,也可能不这样想)创建丰富的参数类型系统,从而增强在原来的 Python 中内嵌的相关类型。然而,dispatch 并没有为创建其他类(内嵌的,或用户定义的)的各种受限成员值提供一些封装程序,而是提供了一种通用函数的方法来实现自己的精心设计的“duck 类型化”(duck 是在 Python 和 Ruby 中经常使用的一个词,意思是“如果某个动物走路像鸭子,叫声也像鸭子,那么我们就可以把它当作是鸭子”)。我们通常并不关心对象是什么;只要它的味道像鸭子一样好就行了,Python 会很高兴地在品尝鸭子的氛围中把它吃下。
下面我们来看一个简单的 doIt() 例子,它使用了一些参数类型化(见清单 3):
清单 3. 使用 PEAK 分派包中的断言分派
import dispatch
@dispatch.generic()
def doIt(foo, other):
"Base generic function of 'doIt()'"
@doIt.when("isinstance(foo,int) and isinstance(other,str)")
def doIt(foo, other):
print "foo is an unrestricted int |", foo, other
@doIt.when("isinstance(foo,str) and isinstance(other,int)")
def doIt(foo, other):
print "foo is str, other an int |", foo, other
@doIt.when("isinstance(foo,int) and 3<=foo<=17 and isinstance(other,str)")
def doIt(foo, other):
print "foo is between 3 and 17 |", foo, other
@doIt.when("isinstance(foo,int) and 0<=foo<=1000 and isinstance(other,str)")
def doIt(foo, other):
print "foo is between 0 and 1000 |", foo, other
doIt( 1, 'this') # -> foo is between 0 and 1000 | 1 this
doIt('x', 1234) # -> foo is str, other an int | x 1234
doIt(10, 'this') # -> foo is between 3 and 17 | 10 this
doIt(20, 'this') # -> foo is between 0 and 1000 | 20 this
doIt(-7, 'this') # -> foo is an unrestricted int | -7 this
try: doIt(2222, 66)
except dispatch.interfaces.NoApplicableMethods:
print "No Applicable Methods" # -> No Applicable Methods
- ››深入理解JAR包
- ››深入分析Volatile的实现原理
- ››深入理解Flash Player的应用程序域(Application ...
- ››深入理解flash函数(AS2)
- ››深入理解Android消息处理系统——Looper、Handler...
- ››深入理解SET NAMES和mysql(i)_set_charset的区别
- ››深入理解Mysql字符集设置
- ››深入浅出实战攻防恶意PDF文档
- ››深入剖析防火墙策略的执行过程:ISA2006系列之六
- ››深入JavaScript与.NET Framework中的日期时间(3)...
- ››深入JavaScript与.NET Framework中的日期时间(2)...
- ››深入JavaScript与.NET Framework中的日期时间(1)...
更多精彩
赞助商链接