作者sbrhsieh (偶爾想擺爛一下)
看板PLT
標題Re: [比較] 簡單的 Java/Python/Ruby/Scala 比較。
時間Fri Jan 8 01:00:24 2010
※ 引述《brianhsu (墳墓)》之銘言:
: 重點是下面了,現在我們發現原來的設計有問題,因為 lat 不能小於 -90
: 或是大於 90 ,我們要如何在不更動原有的客戶端的情況下,把這個判斷加
: 到我們的函式庫呢?Python / Ruby / Scala 都可以很輕鬆的做到。
: 先看 Python 的:
: ===============================================================
: class Coord (object)
: def __init__ (self, lat = 0.0, lon = 0.0):
: self.lat, self.lon = lat, lon
: def getLat (slef):
: return self.__lat
: def setLat (self, lat):
: if not -90.0 <= lat <= 90.0:
: raise ValueError ("Bad latitude")
: self.__lat = lat
: lat = property (getLat, setLat)
: ===============================================================
: 這段程式碼裡面,我們設了 getLat 和 setLat 這兩個函式,接著再指定說
: lat 的 getter / setter 就分別是 getLat 和 setLat。
上面這段碼有一點小錯誤。
class Coord(object)
:
def __init__(self, lat=0.0, lon=0.0):
self.
__lat, self.lon = lat, lon
...
: 舉一個實際一點的例子,我就看不出來為什麼 Python 裡成員函數要存取成
: 員變數的時候要用 self.__lat 這個方式,不清楚為什麼 lat 前面還要多
: 兩個底線。
加底線的目的主要是 name mangling,Coord object 建構後,該 object 會有個
attribute 名為 "_Coord__lat",這通常是避免 subclass 取了一個屬性名與
base class 某個屬性名相同造成不當的覆蓋。
在這個例子裡,你也可以單純把 lat attribute 取名為 mLat 或其他適當的名字。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.133.36