搞不好這是寶石眾和蟒蛇眾最大的區別。
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 中的 POST 與 GET 實作為 dictionary-like 的 QueryDict 物件,讓程式員可以用與 dictionary 類似的觀念來操作 post 和 get 資料。這便可以看出蟒蛇眾對 dictionary 的鍾愛。
能夠簡單作就不要複雜化。我喜歡寫 Python。
Please send trackback to: http://blog.seety.org/everydaywork/2007/4/5/664/trackback/.
不過,我一向認為 Python 希望我們能用內建的物件就儘量用內建的物件。如果所需的操作就是個 dictionary,沒有多長出奇怪的 method,不需要 accessor。
那就用 dictionary 吧。
太強調 OO ,有時候只是把簡單的事情複雜化罷了。凡事還是因地制宜,程式語言把選擇解決方法的彈性留給程式設計者較好些。
python 群也有些人喜歡把 config 參數用 OO 的方式存取呀.