2005年09月06日 星期二 17:27
今天看到一篇好文,是Bruce Eckel(Think in java的作者,他的Think in Python还没有写完)在Pycon2005上的演讲,真是遗憾以前没有注意到篇文章。它主要想说的是Python微妙的面向对象技术及尴尬的设计模式应用(起码我是这么理解的)。文末宣布了《Think in Python》这本书将采取开放式的写作模式,放在wiki中,谁愿意写就谁写(基于显漏出来的他对python的一些想法我的感觉是他不想再写下去了)。 pdf及录音下载: http://www.pycon.org/talks/2005/wed/track1/44/talkDetails 这儿还有他觉得很中肯的与Ruby的比较: http://www.artima.com/weblogs/index.jsp?blogger=beckel 下面摘录一些主要内容: 观点一: 动态语言中的面向对象设计不能照搬设计模式 1、(面向对象)设计被所使用的语言影响着; 2、大部的面向对象设计都是相同的; 3、如果使用了一个动态语言情况就不同了。 例证: 1、GoF的《设计模式》一书主要是用C++的思维来写的,那时C++也是早期产物; 2、Smalltalk程序员受到的影响非常小。 观点二: Python需要interface 1、interface是为了静态类型的检查,从这点上看python不需要; 2、但是interface可以让你在调用一个方法之前得知更多的类型信息; 3、可以减少基类的耦合; 4、可以更好的使用设计模式; 观点三: Python需要adapter吗? 1、不需要,adapter只是一个便利:连接两个不相容的对象; 2、但是它可以让使用一个象framework这样的大型系统更容易,减少手工代码; 3、如果在语言中正式确立了会让adapter的使用更平常、更自然。 文中还用大量代码展示了Python中的Delegation、Proxy、Iterator模式的实际应用方法。还讲到了关于AOP(Aspect-oriented programming)编程的问题。 最后提出的问题: 1、Visitor模式可以让你给一个固定层次的类(a fixed hierarchy of classes)动 态的增加新的方法。这个固定的层次和动态增加新方法在Python中意味着什么? 2、动态语言更好吗? 现在暂时的回答是肯定的。但将来不这么肯定。(动态语言)提供零部件容易,但是 提供水电工就难了,最好是能有木匠,但是近期之内看不到。 我的理解可能是错的或者片面的,希望大家就此讨论一下。
2005年09月06日 星期二 16:40
----- Original Message ----- From: "goopler" <alang.yl at gmail.com> To: <python-chinese at lists.python.cn> Sent: Tuesday, September 06, 2005 6:27 PM Subject: [python-chinese] [信息]Python微妙的面向对象技术及尴尬的设计模式应用 > 它主要想说的是Python微妙的面向对象技术及尴尬的设计模式应用(起码我是这么理 解的)。 agree.but <> is still worth being read.
2005年09月06日 星期二 17:31
太高深……………… 在 05-9-6,goopler<alang.yl at gmail.com> 写道: > 今天看到一篇好文,是Bruce Eckel(Think in java的作者,他的Think in > Python还没有写完)在Pycon2005上的演讲,真是遗憾以前没有注意到篇文章。它主要想说的是Python微妙的面向对象技术及尴尬的设计模式应用(起码我是这么理解的)。文末宣布了《Think > in Python》这本书将采取开放式的写作模式,放在wiki中,谁愿意写就谁写(基于显漏出来的他对python的一些想法我的感觉是他不想再写下去了)。 > > pdf及录音下载: > http://www.pycon.org/talks/2005/wed/track1/44/talkDetails > > 这儿还有他觉得很中肯的与Ruby的比较: > http://www.artima.com/weblogs/index.jsp?blogger=beckel > > 下面摘录一些主要内容: > 观点一: > 动态语言中的面向对象设计不能照搬设计模式 > 1、(面向对象)设计被所使用的语言影响着; > 2、大部的面向对象设计都是相同的; > 3、如果使用了一个动态语言情况就不同了。 > 例证: > 1、GoF的《设计模式》一书主要是用C++的思维来写的,那时C++也是早期产物; > 2、Smalltalk程序员受到的影响非常小。 > > 观点二: > Python需要interface > 1、interface是为了静态类型的检查,从这点上看python不需要; > 2、但是interface可以让你在调用一个方法之前得知更多的类型信息; > 3、可以减少基类的耦合; > 4、可以更好的使用设计模式; > > 观点三: > Python需要adapter吗? > 1、不需要,adapter只是一个便利:连接两个不相容的对象; > 2、但是它可以让使用一个象framework这样的大型系统更容易,减少手工代码; > 3、如果在语言中正式确立了会让adapter的使用更平常、更自然。 > > 文中还用大量代码展示了Python中的Delegation、Proxy、Iterator模式的实际应用方法。还讲到了关于AOP(Aspect-oriented > programming)编程的问题。 > > 最后提出的问题: > 1、Visitor模式可以让你给一个固定层次的类(a fixed hierarchy of classes)动 > 态的增加新的方法。这个固定的层次和动态增加新方法在Python中意味着什么? > 2、动态语言更好吗? > 现在暂时的回答是肯定的。但将来不这么肯定。(动态语言)提供零部件容易,但是 > 提供水电工就难了,最好是能有木匠,但是近期之内看不到。 > > 我的理解可能是错的或者片面的,希望大家就此讨论一下。 > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- [Time is unimportant, only life important!]
2005年09月06日 星期二 19:17
非常同意2、3观点,这是显而易见的,我从来没有定义过接口基类,因为没用。 在 05-9-6,chenzh<chenzh at bhh.com.cn> 写道: > > ----- Original Message ----- > From: "goopler" <alang.yl at gmail.com> > To: <python-chinese at lists.python.cn> > Sent: Tuesday, September 06, 2005 6:27 PM > Subject: [python-chinese] [信息]Python微妙的面向对象技术及尴尬的设计模式应用 > > > > > 它主要想说的是Python微妙的面向对象技术及尴尬的设计模式应用(起码我是这么理 > 解的)。 > agree.but <> is still worth being read. > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > >
2005年09月06日 星期二 19:56
"我从来没有定义过接口基类,因为没用" 为何? 在05-9-6,flya flya <flyaflyaa at gmail.com> 写道: > > 非常同意2、3观点,这是显而易见的,我从来没有定义过接口基类,因为没用。 > > 在 05-9-6,chenzh<chenzh at bhh.com.cn> 写道: > > > > ----- Original Message ----- > > From: "goopler" <alang.yl at gmail.com> > > To: <python-chinese at lists.python.cn> > > Sent: Tuesday, September 06, 2005 6:27 PM > > Subject: [python-chinese] [信息]Python微妙的面向对象技术及尴尬的设计模式应用 > > > > > > > > > 它主要想说的是Python微妙的面向对象技术及尴尬的设计模式应用(起码我是这么理 > > 解的)。 > > agree.but <> is still worth being read. > > > > > > _______________________________________________ > > 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 > > > -- Blog:http://www.donews.net/changzheng -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050906/14761075/attachment.html
2005年09月06日 星期二 21:06
TIP的太监也是意料之中的事,何况设计模式的价值对Python不如对Java和C++大。当初看Bruce的singleton的时候发觉这个模式用的变成技巧太复杂了,不但不能套用到其它语言里,而且升级到2.3之后连Python都不支持了。后来看了Python in a Nutshell的例子,也是Python Only的。写TIP的本意是用python来学习设计模式,但如果搞出来的例子都是Python Only的,那这书的价值在哪里?所以Bruce疲掉也是正常的。 静态语言有静态语言的优点,至少用变量的时候你能很准确地知道它都有哪些方法。动态语言自己写的时候是方便,但是等要读别人的代码时,有时就有一些晕了。 On 9/6/05, 清风 <paradise.qingfeng at gmail.com> wrote: > "我从来没有定义过接口基类,因为没用" > 为何? > > 在05-9-6,flya flya <flyaflyaa at gmail.com> 写道: > > 非常同意2、3观点,这是显而易见的,我从来没有定义过接口基类,因为没用。 > > > > 在 05-9-6,chenzh<chenzh at bhh.com.cn> 写道: > > > > > > ----- Original Message ----- > > > From: "goopler" < alang.yl at gmail.com> > > > To: <python-chinese at lists.python.cn> > > > Sent: Tuesday, September 06, 2005 6:27 PM > > > Subject: [python-chinese] [信息]Python微妙的面向对象技术及尴尬的设计模式应用 > > > > > > > > > > > > > 它主要想说的是Python微妙的面向对象技术及尴尬的设计模式应用(起码我是这么理 > > > 解的)。 > > > agree.but <> is still worth being read. > > > > > > > > > _______________________________________________ > > > 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 > > > > > > > > > > -- > Blog:http://www.donews.net/changzheng > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > >
2005年09月06日 星期二 21:20
比如一般用接口在C++中这样: class interface { virtual void dosomething() = 0 } class A:public interface { void dosomething() { print("A")} } class B:public interface { void dosomething() { print("B")} } 多态: dosomething(interface * foo) { foo->dosomething() } 如果是python的话,interface一点用没有: class A: def dosomething(self): print "A" class B: def dosomething(self): print "B" def dosomething(obj): obj.dosomething 只要定义的类中有dosomething这个函数就行,接口是没用的。 在 05-9-6,清风<paradise.qingfeng at gmail.com> 写道: > "我从来没有定义过接口基类,因为没用" > 为何? > > 在05-9-6,flya flya <flyaflyaa at gmail.com> 写道: > > 非常同意2、3观点,这是显而易见的,我从来没有定义过接口基类,因为没用。 > > > > 在 05-9-6,chenzh<chenzh at bhh.com.cn> 写道: > > > > > > ----- Original Message ----- > > > From: "goopler" < alang.yl at gmail.com> > > > To: <python-chinese at lists.python.cn> > > > Sent: Tuesday, September 06, 2005 6:27 PM > > > Subject: [python-chinese] [信息]Python微妙的面向对象技术及尴尬的设计模式应用 > > > > > > > > > > > > > 它主要想说的是Python微妙的面向对象技术及尴尬的设计模式应用(起码我是这么理 > > > 解的)。 > > > agree.but <> is still worth being read. > > > > > > > > > _______________________________________________ > > > 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 > > > > > > > > > > -- > Blog:http://www.donews.net/changzheng > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > >
2005年09月07日 星期三 00:55
On 9/6/05, flya flya <flyaflyaa at gmail.com> wrote: > 比如一般用接口在C++中这样: > class interface > { > virtual void dosomething() = 0 > } > > class A:public interface > { > void dosomething() > { print("A")} > > } > > class B:public interface > { > void dosomething() > { print("B")} > > } > 多态: > dosomething(interface * foo) > { > foo->dosomething() > } > 如果是python的话,interface一点用没有: > class A: > def dosomething(self): > print "A" > class B: > def dosomething(self): > print "B" > > def dosomething(obj): > obj.dosomething > 只要定义的类中有dosomething这个函数就行,接口是没用的。 这个主要是因为python把 method 和 attribute都放到了__dict__里面所以,在用的时候相当于__dict__['dosomething'](), 而C++的method需要在compile-time就知道偏移地址, python的interface(不过从语法上面并没有直接支持interface(java好像是有语法支持的interface, 不过zope和twisted已经开始使用interface了) )跟C++的interface的底层实现完全不一样,所以python的实现OO比C++的OO要灵活的多,根本不用去想是什么是compile-time的,什么是run-time的 python相对于C++来说在compile-time基本上不作任何事(除了syntax的检查),全部都放到run-time去作,这样作的好处就是在run-time的时候python还是python,而C++就变成汇编码/机器码. 不过现在zope和twisted使用的interface并没有说明会有什么返回值,python真正的interface可能要等到3.0不过python的作者已经开始对interface感兴趣 http://www.artima.com/weblogs/viewpost.jsp?thread=92662 > So, while I haven't decided that Python 3.0 will have interfaces (or type > declarations), I'd like to go ahead and hypothesize about such a future, and > look at some of the standard interfaces the language would provide for > various common protocols like sequence, mapping and file. 具体的interface的作用,还有adaptor(如果真的加入了interface,adaptor应该也会, type declarations也可能一起加入),在Aspect-oriented programming / componet-oriented里面很有用,特别是象twisted这样的异步的framework中有大量的callback, 一个class根本不可能知道另一个class会有什么method和attrib,所以必需要约定一个interface. type declarations(这个我不太喜欢),这是作者举的一个例子: def writelines(s: list[str]) -> None: """Writes a list of strings. Note: this does not add newlines; the strings in the list are supposed to end in a newline. """ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050907/ebd611e7/attachment.html
Zeuux © 2025
京ICP备05028076号