Python论坛  - 讨论区

标题:[python-chinese] [信息]Python微妙的面向对象技术及尴尬的设计模式应用

2005年09月06日 星期二 17:27

goopler alang.yl at gmail.com
Tue Sep 6 17:27:08 HKT 2005

今天看到一篇好文,是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、动态语言更好吗?
现在暂时的回答是肯定的。但将来不这么肯定。(动态语言)提供零部件容易,但是
提供水电工就难了,最好是能有木匠,但是近期之内看不到。

我的理解可能是错的或者片面的,希望大家就此讨论一下。

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

2005年09月06日 星期二 16:40

chenzh chenzh at bhh.com.cn
Tue Sep 6 16:40:57 HKT 2005

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


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

2005年09月06日 星期二 17:31

Zoom Quiet zoom.quiet at gmail.com
Tue Sep 6 17:31:20 HKT 2005

太高深………………

在 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!]

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

2005年09月06日 星期二 19:17

flya flya flyaflyaa at gmail.com
Tue Sep 6 19:17:30 HKT 2005

非常同意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
> 
> 
>

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

2005年09月06日 星期二 19:56

清风 paradise.qingfeng at gmail.com
Tue Sep 6 19:56:46 HKT 2005

"我从来没有定义过接口基类,因为没用"
为何?

在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

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

2005年09月06日 星期二 21:06

shhgs shhgs.efhilt at gmail.com
Tue Sep 6 21:06:11 HKT 2005

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

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

2005年09月06日 星期二 21:20

flya flya flyaflyaa at gmail.com
Tue Sep 6 21:20:28 HKT 2005

比如一般用接口在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
> 
> 
>

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

2005年09月07日 星期三 00:55

panhudie nirvana117 at gmail.com
Wed Sep 7 00:55:03 HKT 2005

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

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

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

    你的回复:

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

    Zeuux © 2025

    京ICP备05028076号