Python用多元法泛化多态性
2007-03-29 12:18:17 来源:WEB开发网核心提示: 完善多态性在单分派多态性中,挑选出“拥有”方法的对象,Python用多元法泛化多态性(3),从语法上说,在 Python 中通过在点之前指定名称来挑选对象 - 跟在点、方法名和左括号后面的只是一个参数,请参阅 参考资料以下载该模块本身或将其作为 Gnosis 实用程
完善多态性
在单分派多态性中,挑选出“拥有”方法的对象。从语法上说,在 Python 中通过在点之前指定名称来挑选对象 - 跟在点、方法名和左括号后面的只是一个参数。但是从语义上说,对象的特殊之处还在于利用继承树来进行方法解析。
如果不用一种特定方式处理一个对象,而是允许代码块中所包含的每个对象帮助选择正确的代码路径,那会怎样呢?例如,我们可以用一种更对称的方式来表达五路切换:
清单 3. Foo 和 Bar 上的多分派
x_with_y = Dispatch([((object, object), <<exception block>>)])
x_with_y.add_rule((Foo,Foo), <<FooFoo block>>)
x_with_y.add_rule((Foo,Bar), <<FooBar block>>)
x_with_y.add_rule((Bar,Foo), <<BarFoo block>>)
x_with_y.add_rule((Bar,Bar), <<BarBar block>>)
#...call the function x_with_y() using some arguments...
x_with_y(something, otherthing)
我认为对多个参数进行多态分派所具有的这种对称性比先前的样式要雅致得多。还有,对于确定要采取的适当代码路径时所涉及的两个对象,该样式有助于记录它们的同等作用。
标准 Python 不允许配置这种类型的多分派;但幸运的是,您可以使用我所编写的模块 multimethods 来做到这一点。请参阅 参考资料以下载该模块本身或将其作为 Gnosis 实用程序中的一部分。一旦安装了 multimethods 之后,您需要做的是在应用程序的顶部包含这样一行代码:
from multimethods import Dispatch
“多元法(multimethods)”通常是多分派的同义词;但是多元法这个名称暗示着处理较抽象的概念时应采用具体的函数/对象。
更多精彩
赞助商链接