最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年12月25日 11:15:26   作者:梁十安  
這篇文章主要介紹了python @propert裝飾器使用方法原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

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

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

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

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 方法,這樣起到了封裝的作用,把一些不想對外公開的屬性隱蔽起來,而只是提供方法給用戶操作,在方法里面,我們可以檢查參數(shù)的合理性等。這樣做沒什么問題,但是我們有更簡單的方式來做這件事。

二:使用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 當成一個屬性來用,此時,又會創(chuàng)建一個新的裝飾器 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

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

相關文章

  • python+logging+yaml實現(xiàn)日志分割

    python+logging+yaml實現(xiàn)日志分割

    這篇文章主要為大家詳細介紹了python+logging+yaml實現(xiàn)日志分割,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python的類實例屬性訪問規(guī)則探討

    Python的類實例屬性訪問規(guī)則探討

    這篇文章主要介紹了Python的類實例屬性訪問規(guī)則,本文總結了一些對C++和Java程序員來說不是很直觀的地方來說明Python中的類實例屬性訪問,需要的朋友可以參考下
    2015-01-01
  • Python MySQLdb模塊連接操作mysql數(shù)據庫實例

    Python MySQLdb模塊連接操作mysql數(shù)據庫實例

    這篇文章主要介紹了Python MySQLdb模塊連接操作mysql數(shù)據庫實例,本文直接給出操作mysql代碼實例,包含創(chuàng)建表、插入數(shù)據、插入多條數(shù)據、查詢數(shù)據等內容,需要的朋友可以參考下
    2015-04-04
  • Python 操作 MongoDB 講解詳細

    Python 操作 MongoDB 講解詳細

    MongoDB是一款開源的、基于分布式的、面向文檔存儲的非關系型數(shù)據庫。擁有高性能、高可用,易擴展的優(yōu)點,并且支持豐富的查詢語言來支持讀寫操作以及更復雜的查詢等。接下來我們來看一下如何使用Python操作MongoDB數(shù)據庫
    2021-09-09
  • Python編程調用百度API實現(xiàn)地理位置經緯度坐標轉換示例

    Python編程調用百度API實現(xiàn)地理位置經緯度坐標轉換示例

    這篇文章主要介紹了Python編程調用百度API來實現(xiàn)地理位置經緯度坐標轉換的示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • python實現(xiàn)發(fā)送郵件

    python實現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細介紹了python實現(xiàn)發(fā)送郵件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • python 利用棧和隊列模擬遞歸的過程

    python 利用棧和隊列模擬遞歸的過程

    這篇文章主要介紹了python 利用棧和隊列模擬遞歸的過程,文中并通過兩段代碼給大家介紹了下遞歸和非遞歸的區(qū)別,需要的朋友可以參考下
    2018-05-05
  • python制作小說爬蟲實錄

    python制作小說爬蟲實錄

    本文給大家介紹的是作者所寫的第一個爬蟲程序的全過程,從構思到思路到程序的編寫,非常的細致,有需要的小伙伴可以參考下
    2017-08-08
  • Python線程池thread?pool創(chuàng)建使用及實例代碼分享

    Python線程池thread?pool創(chuàng)建使用及實例代碼分享

    這篇文章主要介紹了Python線程池(thread?pool)創(chuàng)建使用及實例代碼分享,文章圍繞主題展開詳細的內容介紹具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Python可視化最頻繁使用的10大工具總結

    Python可視化最頻繁使用的10大工具總結

    數(shù)據可視化是數(shù)據科學中不可缺少的一部分,下面這篇文章主要給大家介紹了關于Python可視化最頻繁使用的10大工具,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-03-03

最新評論

临西县| 兴隆县| 彭州市| 蓬溪县| 永春县| 禹州市| 广元市| 清流县| 璧山县| 东港市| 建水县| 鲁山县| 红安县| 长宁区| 新竹市| 昌江| 云霄县| 吉安县| 隆昌县| 聊城市| 新田县| 太原市| 宁河县| 黎平县| 滨州市| 阜宁县| 沧州市| 温宿县| 平南县| 安平县| 天台县| 安陆市| 宜都市| 渭源县| 新沂市| 连江县| 信宜市| 炉霍县| 禹城市| 兴国县| 闽侯县|