Python论坛  - 讨论区

标题:Re: Re: [python-chinese] 大家对PEP 3000有什么看法?

2005年06月30日 星期四 11:23

amingsc amingsc at 163.com
Thu Jun 30 11:23:02 HKT 2005

幽默..............强

======= 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


[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号