91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python @propert裝飾器使用方法原理解析

發布時間:2020-10-12 12:35:02 來源:腳本之家 閱讀:168 作者:梁十安 欄目:開發技術

這篇文章主要介紹了python @propert裝飾器使用方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

首先,@propert的作用是把類中的方法『變成』了屬性,方便通過實例訪問。propert可以有兩種用法:可以把一個方法變成只讀屬性;可以對一些屬性進行過濾。

想象這樣一個場景,在實例化一個類之后,需要對類的一個屬性進行賦值,這時候是沒有對屬性屬性被賦予的值進行判斷的,如果屬性被賦予了一個不合適的值,那么代碼在后面執行的時候就會報錯,為了避免這種情況,可以有兩種方法解決。

一:設置一個方法,對屬性值進行判斷:

class Student():

  def get_score(self):
    return self._score

  def set_score(self, value):
    if not isinstance(value, int):
      raise ValueError('score must be an integer!')
    if value < 0 or value > 100:
      raise ValueError('score must between 0 ~ 100!')
    self._score = value  
if __name__ == '__main__':  s = Student()  s.set_score(value="88")  print(s.get_score())

再Student類中,為了避免直接對 _score 屬性操作,我們提供了 get_score 和 set_score 方法,這樣起到了封裝的作用,把一些不想對外公開的屬性隱蔽起來,而只是提供方法給用戶操作,在方法里面,我們可以檢查參數的合理性等。這樣做沒什么問題,但是我們有更簡單的方式來做這件事。

二:使用propert裝飾器。

class Teacher():
  @property
  def score(self):
    return self._score

  @score.setter
  def score(self, value):
    if not isinstance(value, int):
      raise ValueError('score must be an integer!')
    if value < 0 or value > 100:
      raise ValueError('score must between 0 ~ 100!')
    self._score = value
if __name__ == '__main__':

  t = Teacher()
  t.score = 10
  print(t.score)
  t.score = 20
  print(t.score)

在上面,我們給方法 score 加上了 @property,于是我們可以把 score 當成一個屬性來用,此時,又會創建一個新的裝飾器 score.setter,它可以把被裝飾的方法變成屬性來賦值。

另外,我們也不一定要使用 score.setter 這個裝飾器,這時 score 就變成一個只讀屬性了:

class test():
  def __init__(self, s1):
    self.s = s1

  @property
  def f1(self):
    return self.s

if __name__ == '__main__':

  t1 = test(s1=90)
  print(t1.f1)

注意:最后面一行的print(t1.f1)不要加括號,print(t1.f1()),要不會報錯'int' object is not callable

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

治县。| 隆子县| 隆化县| 泸西县| 怀柔区| 顺义区| 吉木乃县| 贺州市| 洪泽县| 海盐县| 五寨县| 孙吴县| 泾川县| 象山县| 陇西县| 江陵县| 汉寿县| 绥芬河市| 两当县| 壶关县| 辛集市| 昌平区| 佛坪县| 东台市| 东乌珠穆沁旗| 襄垣县| 万年县| 鄂托克前旗| 湟中县| 志丹县| 瑞金市| 满城县| 河源市| 平利县| 浠水县| 堆龙德庆县| 海宁市| 上高县| 老河口市| 营山县| 宝山区|