看板 PLT 關於我們 聯絡資訊
※ 引述《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