@Property

      在〈@Property〉中尚無留言

存取器

變數加上二個底線就變成了private, 最主要的目的是要進行封裝, 讓外界不得任易更改. 為了能存取此變數, 就會再加上getter/setter進行檢查及限制.

所以在使用上, 只可以調用getter/setter. 但在使用getter/setter總是沒有直接存取變數那麼方便, 至少調用getter/setter還要加上 “()”.

超級懶的我們總是會想, 如果可以直接存取private變數, 然後又可以執行檢查的工作, 那這世界該有多美滿. 懶成這個樣子, 那是不是要考慮轉行呢!! 其實我也不是很愛寫程式, 我只是為了生活. 我寫程式不是為了錢, 純粹為了生活. (曾馨瑩也絕對不是為了錢而嫁給那老頭, 純粹是為了生活)

@property

@Property這個裝籂子又出來普渡世人了. 先定義一個跟變數同名字的方法, 然後把變數名改成其他名字, 比如前面多加一個底線, 如 _level, 然後此方法就return _level

接下來, 再level 方法上面加入 @property. 如此外界就只要寫 p1.level就會返回 _level的值. 請注意喔, 不是p1.level(), 因為加了@property, 所以不用 “()”

接下來就是底下紅色的部份, 用來規定當設定時要作的事, 及讀取時要作的事(放大10倍)

請注意, setter及getter的方法名稱, 一定要跟property的名稱一樣, 都是 def level()

class Pokemon(object):
    @property
    def level(self):
        return self._level
    @level.setter
    def level(self, l):
        if l > 10 :
            self._level=1
        else:
            self._level=l
    @level.getter
    def level(self):
        return self._level*10
p1=Pokemon()
p1.level=8
print(p1.level)

唯讀

在上述的代碼中, 把setter拿掉, 就變成唯讀了

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *