搞不好這是寶石眾和蟒蛇眾最大的區別。

Python 也是 OO 語言,不過 OO 一直不是 Python 強調的重點。我反而覺得,OO 只是 Python 吸引 C/C++ 眾和爪哇眾的幌子 XD 當然,Python 是確確實實的 OO 語言,Python 裡的所有元素都是物件,這沒有騙人,只是 Python 的 best practice 不都是 OO。我想這就如同 C++ 也是個 OO 語言,但 C++ 的很多 best practice 是用 template 來實作的一樣。

Python 既然不強調自身的 OO 血統,像用 Struct 來包資料的這種作法就不被人推崇。

然而,這可不是說在 Python 裡不該用物件來包資料;像我就超喜歡在 script 前面加一個:

from optparse import OptionParser, OptionGroup
class Parameters( object ):
    """
    Class for command line singleton.
    """
    def __init__( self ):
        """
        Build command line parameters.
        """
        op = OptionParser(
            usage="usage: %prog",
            version="%prog, $Revision: 503 $" )

        opg = OptionGroup( op, "Boundary Conditions" )
        opg.add_option( "--nobc", action="store_false",
                      dest="do_bc", default=True,
                      help="Do not print BC messages." )
        op.add_option_group( opg )

        opg = OptionGroup( op, "Printing Options" )
        opg.add_option( "-w", "--width", action="store", type="int",
                      dest="screenwidth", default=None,
                      help="Screen width for printing messages." )
        op.add_option_group( opg )

        self.op = op
        (self.options, self.args) = op.parse_args()
clps = Parameters()

這樣在 script 的各處就都可以用 clps (denotes Command Line Parameters) 來存取指令行參數,而且想在哪裡印 help 就在哪裡印 help,方便無比。

但是,在大多數時候,能用 dictionary (即 Ruby 裡的 hash) 的地方,Python 都希望我們用 dictionary。例如 Django 便把 request 中的 POSTGET 實作為 dictionary-like 的 QueryDict 物件,讓程式員可以用與 dictionary 類似的觀念來操作 post 和 get 資料。這便可以看出蟒蛇眾對 dictionary 的鍾愛。

能夠簡單作就不要複雜化。我喜歡寫 Python。

Posted by yungyuc at 20:19, 3 comments, 0 trackback.
Navigate
Add a trackback
Comments
Re: 物件、物件、物件、字典
原來是 OptionParser 阿. 用來寫 console 程式真的好用.

python 群也有些人喜歡把 config 參數用 OO 的方式存取呀.
gasolin at 2007-04-06 00:25.
Re: 物件、物件、物件、字典
絕對不會有人認為 OO 的作法不正確的。

不過,我一向認為 Python 希望我們能用內建的物件就儘量用內建的物件。如果所需的操作就是個 dictionary,沒有多長出奇怪的 method,不需要 accessor。

那就用 dictionary 吧。
yungyuc at 2007-04-06 08:17.
Re: 物件、物件、物件、字典
這也是為甚麼相較於 Java, Ruby ,我覺得 C++, Python 較對味的原因。

太強調 OO ,有時候只是把簡單的事情複雜化罷了。凡事還是因地制宜,程式語言把選擇解決方法的彈性留給程式設計者較好些。
Yukuan at 2007-04-07 14:02.
Add a comment

Your name. (required)

Your personal website. (optional)

Your email address. Will not show in page. (suggested, but optional)

Text format is "Plain Text".

Enter "MvCzN"
© hover year to navigate month: powered by django