2005年06月30日 星期四 11:23
幽默..............强 ======= 2005-06-29 23:18:00 您在来信中写道:======= >这个其实是习惯的问题,C++没出来以前,大家用C是怎么做的? > >C++(或其类似的语言)形成习惯以后,很多东西就是觉得必然像C++才好,比如 >JAVA就是这样。 > >JAVA在WEB上的应用形成习惯以后,大家也就觉得一定要写成某种形式的 >interfaces,才能扩展,这个也是习惯。 > >静态语言中interface是必须的,因为变量必须声明一个类型,而这个类型又要能 >表现出所操作对象的基本方法集合,于是就形成interface语法。 > >但动态语言中,这个不是必须的,如果认为这个是必须的,那就是从JAVA中带来的 >习惯,可以简单问一下:为何只有PYTHON应用到WEB领域后,才有人想起来需要 >interface? > >再来解释一下,为何java中一定要interface,因为java只支持“面向对象”这一种 >编程范式,interface是在面向对象范式中用到的,所以是必须。而C++支持4种以 >上,python呢?比C++更多。 > >interface只在继承体系中才有意义,如果我们不使用继承,那么interface就毫无 >意义了,其它的选择真的很多,我昨天在啄木鸟上发的一个委托功能的python实 >现,其实也算一种解决方案(我只是简单模仿C#委托)。 > >一个系统可以全部采用委托来设计,可以把完全避免继承。采用委托来设计,可以 >拿电路板作比较:电路板上只有一些基本元素(电容、电阻、电感、二极管、三极 >管等等),可曾看到大规模的继承体系?各个元件的每个输入极就是一个调用接 >口,每个输出极就是一个委托,一个子模块可由多个元件之间的委托和调用接口藕 >合而成,整个系统可由多个子模块藕合而成。各个元件(应该说各类,因为只要类 >是好的,那么可认为各个元件也是好的)可单独测试,可以很方便的配置测试环 >境,各个模块也可以这样测试,整个系统各模块之间只是简单遵守接口协议,并没 >有真正的形成一个接口。 > >只是有一点很遗憾,由于JAVA本身的成功,编程被引导到继承体系中了,可能是因 >为这个是最容易实现的吧,但并不是说它是最合理的体系,对python这样的动态语 >言来说,使用继承我认为仅仅是长久形成的编程习惯,而不是最理想的。 > >最后举个简单例子,解释继承和委托之间的区别: > >继承: >class 人: >def on肚子痛(self): >pass > >class 穷人(人): >def on肚子痛(self): >self.用手揉() > >class 富人(人): >def on肚子痛(self): >self.找医生() > >委托(使用我写的那个delegate类): >class 人: >def __init__(self): >self.on肚子痛 = deletate (proto='on肚子痛()') > >def 找医生(): >pass > >def 用手揉(): >pass > >穷人 = 人() >富人 = 人() >穷人.on肚子痛 += 用手揉 >副人.on肚子痛 += 找医生 > >从这里看,比继承好的一点是:穷人富人都是人,他们别的方面可能都一样,可以 >细微调整某个不同的地方。 > >注:上面用的+=符号是迫不得已,因为不能直接用=。(如果用:穷人.on肚子痛 = >delegate(用手揉)也是可以的) > >shhgs 写道: > >>很遗憾,一个知音都没找到,不过我还是坚持我的看法。 >> >>1。Interface很重要,它是解决Python多重继承和MRO问题的最佳途径。如果真的向你们说的那样无聊,Zope和Twisted就不用费劲巴力地去搞一个了。 >> >>2。自从用了Python,我就再也没有留恋过Perl。不过有一个小小的例外,就是在写range(10) 的时候。我时常情不自禁地写for i >>in [1..3]。此外Python没有提供enumeration,__range__也可以借此补上这个空白。 >> >>3。private,public,和friend。并不是他们不重要,而是Python的实现比较困难。Python可以在对象的实例化之后再绑定方法,所以实现private有一定的难度。如果你把一个方法定义为private的,过一会用户再绑定了一个同名的方法,请问这个方法到底算不算,怎么算。但是有难度不是说没必要。否则Guido根本没必要去搞什么__XXX的方法名混淆。 >> >> >>------------------------------------------------------------------------ >> >>_______________________________________________ >>python-chinese list >>python-chinese at lists.python.cn >>http://python.cn/mailman/listinfo/python-chinese >> >> >_______________________________________________ >python-chinese list >python-chinese at lists.python.cn >http://python.cn/mailman/listinfo/python-chinese > = = = = = = = = = = = = = = = = = = = = 致 礼! amingsc amingsc at 163.com 2005-06-30
Zeuux © 2025
京ICP备05028076号