成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python - @property 方法變屬性

Alliot / 1745人閱讀

摘要:屬性有三個裝飾器。當(dāng)屬性只有方法,則為只有只讀屬性。使用規(guī)則只讀屬性只有方法,在方法前加上可讀可寫屬性有和方法,在方法上使用屬性名。

@property

@property是內(nèi)置的裝飾器,與普通裝飾器原理是一樣的,只不過返回的不是函數(shù),而是類對象.

@property負(fù)責(zé)把一個方法變成屬性進(jìn)行調(diào)用,保證對參數(shù)進(jìn)行必要的檢查。

屬性有三個裝飾器:setter、getter、deleter。當(dāng)屬性只有getter方法,則為只有只讀屬性。否則為可讀寫屬性。

定義一個類:

class Student(object):
     def __init__(self,score):
         self.__score = score      ## __score 翻譯成 _Student__score
    
     # 允許外部代碼獲取score
     def get_score(self):
         print("%s"%self.__score)
         return self.__score

上述例子中,在綁定屬性的時候,直接把屬性暴露出去,導(dǎo)致可以隨意修改,但是對score的修改又沒有做校驗(yàn)限制等。
為了限制屬性,例如score的范圍,可以通過一個set_score()方法來設(shè)置成績,再通過一個get_score()來獲取成績。
例如:

class Student(object):
     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:         # 輸入的int數(shù)據(jù),判斷輸入的范圍
            raise ValueError("score must between 0 -100 ")
        self.score = value

試運(yùn)行:

>>> s = Student()            # 不需要s=Student(60),因?yàn)闆]有init方法
>>> s.set_score (60)
>>> s.get_score()
60
>>> s.set_score(101)
Traceback (most recent call last):
  File "", line 1, in 
  File "", line 8, in set_score
ValueError: score must between 0 -100

所以,有沒有既能檢查參數(shù),又可以用類似屬性這樣簡單的方式來訪問、判斷類的變量呢?
是否還記得裝飾器decorator可以給函數(shù)動態(tài)加上功能?對于類的方法,裝飾器一樣起作用。

使用規(guī)則:

只讀屬性:只有g(shù)etter方法,在方法前加上@property;

可讀可寫屬性:有g(shù)etter和setter方法,在setter方法上使用@屬性名.setter。

例如:

class Student(object):
   # score:可讀可寫屬性, getter與setter方法

   # 把一個getter方法變成屬性,只需要加上@property就可以了
   @property
   def score(self):
       return self._score

   # 創(chuàng)建另一個裝飾器@score.setter,負(fù)責(zé)把一個setter方法變成屬性賦值
   @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

   # 定義只讀屬性,只定義getter方法
   @property
   def age(self):
        return self._age

? thanks for watching, keep on updating...
點(diǎn)個贊再走吧

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/42635.html

相關(guān)文章

  • 小李飛刀:Python我又來啦,例無虛發(fā)~

    摘要:一點(diǎn)點(diǎn)小刀刀晚上收到了某招聘軟件的的消息,心里慌的不行。所以在上面的代碼中,我們可以考慮把改為來更好的看出繼承關(guān)系。定義方法,在被用于循環(huán)時返回迭代對象,循環(huán)會不斷的調(diào)用方法拿到下一個值,直到終止。 一點(diǎn)點(diǎn)小刀刀 晚上收到了某招聘軟件的HR的消息,心里慌的不行。因?yàn)楹芟霌Q崗位了,可是當(dāng)機(jī)會來的時候,我卻只能表示能力不行。所以要速速的加油了!??! 開始學(xué)習(xí)的分割 日常一點(diǎn)點(diǎn)小雞血!請不要...

    ACb0y 評論0 收藏0
  • 如何正確地使用Python屬性和描述符

    摘要:描述符登場什么是描述符一般來說,描述符是一個具有綁定行為的對象屬性,其屬性的訪問被描述符協(xié)議方法覆寫。先看如何用描述符來解決上面邏輯重復(fù)的問題。 關(guān)于@property裝飾器 在Python中我們使用@property裝飾器來把對函數(shù)的調(diào)用偽裝成對屬性的訪問。 那么為什么要這樣做呢?因?yàn)锧property讓我們將自定義的代碼同變量的訪問/設(shè)定聯(lián)系在了一起,同時為你的類保持一個簡單的訪問...

    huayeluoliuhen 評論0 收藏0
  • 自定義函數(shù)

    摘要:測試對象是否為某類型返回以內(nèi)的倍數(shù)返回是一堆或者當(dāng)為偶數(shù)時生成一個新列表將其加入中的,就是用定義的一個匿名函數(shù),并通過函數(shù),將其應(yīng)用到列表中的每個元素。 1.1 使用函數(shù) 在Python中,函數(shù)必須先聲明,然后才能調(diào)用它,使用函數(shù)時,只要按照函數(shù)定義的形式,向函數(shù)傳遞必需的參數(shù),就可以調(diào)用函數(shù)完成相應(yīng)的功能或者獲得函數(shù)返回的處理結(jié)果。 如果函數(shù)有返回值,那么需要在函數(shù)中使用retur...

    SimpleTriangle 評論0 收藏0
  • [Python3]Python面向?qū)ο蟮某绦蛟O(shè)計

    摘要:于發(fā)表了著名的有害論的論文引起了長達(dá)數(shù)年的論戰(zhàn)并由此產(chǎn)生了結(jié)構(gòu)化程序設(shè)計方法。到現(xiàn)在為止面向?qū)ο笠呀?jīng)成為了主流的開發(fā)思想。面向?qū)ο蟮某绦蛟O(shè)計優(yōu)點(diǎn)解決了程序的擴(kuò)展性。 [Python3]Python面向?qū)ο蟮某绦蛟O(shè)計 一、面向?qū)ο蟮某绦蛟O(shè)計的由來 1.第一階段:面向機(jī)器,1940年以前 最早的程序設(shè)計都是采用機(jī)器語言來編寫的,直接使用二進(jìn)制碼來表示機(jī)器能夠識別和執(zhí)行的指令和數(shù)據(jù)。 簡單來...

    OpenDigg 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<