2011年4月16日 星期六

Python -- OO

Python雖然不全面支援OO所有的特色,並不表示他無法做OO設計,同時也不表示OO不好,雖然我在寫小程式(1k lines以下)覺得Python開發速度很快,但也不表示OO不適用
在許多OOP裡面的overloading以及access control在Python並不支援,大多數Python的的類別屬性是公開的,對於存取的限制仰賴於programmer的素養(依循一定的規則)以及一些decorator的幫助。
另外由於python並不強調型態的重要性,他使用的是duck typing,也就是如果一個型態表現類似某一種型態的特性,你就可以把它當作該型態使用,比方說某隻鳥類似鴨子,你就可以把這隻鳥當作鴨子,可能他只是會呱呱叫,然後會飛短短的距離,python就當他是鴨子,可是根本的型態可能不是鴨子。
python跟java一樣,預設有一個class Object,所有新的class都繼承自這個Object,其中有許多重要的方法,一般python內定的方法使用__(雙底線/double under line)開頭。__str__()傳回一個該物件的字串描述,很類似java的toString();另外有一個__repr__()他回傳該物件的字串,如果執行該字串就可以得到一個一模一樣的物件;預設中python會讓所有的物件可以hash,依賴的是object id,但是一旦改寫了__eq__()方法之後,這個物件就不再是可hash,也就是無法放入set或者dict型態內了。

沒有留言: