作者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