动态函数重载(Dynamic Function Overloading)

翻译 2006年06月23日 10:29:00

我已经向Python的subversion沙箱里提交了一个新的动态函数重载的实现。
尽管“(动态或运行时)重载函数[(dynamically, or run-time) overloaded functions]”这一术语受到各方批评,我还是要继续讲讲它。“(动态或运行时)重载函数”又可称为泛型函数(generic functions)、多重方法(multi-methods)或分派(dispatch),这些术语也都受到了批评。
大家可以在http://svn.python.org/view/sandbox/trunk/overload/上看到一个稍微优化过的实现。Phillip Eby曾说我的实现速度太慢,不过,我建议你们运行一下test_overloading.py,看看你们的情况怎么样。(这需要Python 2.5a 1版本,python.org刚刚发布了该版本。)
Phillip还建议我使用issubclass(),而不要依赖方法解析次序(Method Resolution Order,简称MRO)。他认为,MRO方法会导致虚假的准确性。我不知道是否会这样,因为对于单一派遣(single dispatch)而言,我的方法确实与类方法查找完全匹配。当然,这需要很多附加功能或潜在要求。例如,是否存在调用“next” 可用方法的机制?但是,算法没有清楚地生成下一个方法。另外,如果存在歧义,是否应该抛出异常或者调用缺省方法(或“next”方法,如果我们能够对它的定义达成一致的话)?
对于优化,我相信代码生成(code generation)可以让重载的函数和手写函数运行得一样快。请参见test_overloading.py中的accelerated。
这并不适用Python2.5。这是一个颇具争议的话题,所以应该到Python3000才来试验(也许可以作为Python2.5的第三方附加品)。
大约在一年前我曾经写过相关话题的blog,但是我却忘记有这么一回事了。与今天的情况相比,那时候的实现显得暗淡无光。看来,Plillip的提议还是帮了很大忙。
我希望最终将PyProtocols挤出市场。Plillip应该为我感到骄傲。

(原文链接网址:http://www.artima.com/weblogs/viewpost.jsp?thread=155514;Guido van Rossum的英文blog网址:http://www.artima.com/weblogs/index.jsp?blogger=guido

动态函数重载(Dynamic Function Overloading)

我已经向Python的subversion沙箱里提交了一个新的动态函数重载的实现。尽管“(动态或运行时)重载函数[(dynamically, or run-time) overloaded fun...
  • hejishan
  • hejishan
  • 2008年04月04日 18:26
  • 186

C#动态对象(dynamic)示例(实现方法和属性的动态)

C#的动态对象的属性实现比较简单,如果要实现动态语言那种动态方法就比较困难,因为对于dynamic对象,扩展方法,匿名方法都是不能用直接的,这里还是利用对象和委托来模拟这种动态方法的实现,看起来有点j...
  • hawksoft
  • hawksoft
  • 2012年05月04日 12:19
  • 30043

《C++ primer》学习笔记之三十二:function overload resolution概述

function overload resolution (注意这里的function不是类的成员) hidden: 两个scope,外面的叫"外scope",内面的叫"内scope",则对内scop...
  • xtyyumi301
  • xtyyumi301
  • 2006年04月14日 01:48
  • 942

java中方法的重写(overriding)与重载(overloading)的区别

方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多...
  • ammylinplx
  • ammylinplx
  • 2014年10月03日 15:54
  • 589

Function overloading

Function overloading is a feature of C++ that allows us to create multiple functions with the same n...
  • u012402926
  • u012402926
  • 2014年06月26日 22:46
  • 376

pvanet的问题--ImportError: dynamic module does not define init function (initcython_bbox)

参照:http://www.coin163.com/it/8981382003560309276/python-faster%20rcnn-Faster%20R-CNN 如果发现哪个文件有类似提...
  • h_jlwg6688
  • h_jlwg6688
  • 2016年11月22日 14:57
  • 2216

.net dynamic动态加属性

class Test : System.Dynamic.DynamicObject { public override bool TryGetMember(Sy...
  • cqims21
  • cqims21
  • 2013年12月27日 16:10
  • 3940

java中重载Overriding与重写Overloading的区别

重载(Overloading) (1)方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。...
  • wiebin36
  • wiebin36
  • 2016年07月06日 21:09
  • 492

动态类型Dynamic

public class Student {             public void Say() {                 Console.WriteLine("I'mstudent...
  • kaluluosi111
  • kaluluosi111
  • 2015年11月14日 02:54
  • 427

Dynamic Linking

from:http://realmacsoftware.com/blog/dynamic-linking dynamic Linking  Written by Damien on Apri...
  • yongyinmg
  • yongyinmg
  • 2015年03月30日 17:23
  • 1157
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态函数重载(Dynamic Function Overloading)
举报原因:
原因补充:

(最多只允许输入30个字)