欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

一:設(shè)置一個(gè)方法,對(duì)屬性值進(jìn)行判斷:

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

二:使用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 當(dāng)成一個(gè)屬性來(lái)用,此時(shí),又會(huì)創(chuàng)建一個(gè)新的裝飾器 score.setter,它可以把被裝飾的方法變成屬性來(lái)賦值。

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

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)不要加括號(hào),print(t1.f1()),要不會(huì)報(bào)錯(cuò)'int' object is not callable

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python的else子句使用指南

    python的else子句使用指南

    本文討論P(yáng)ython的for…else和while…else語(yǔ)法,這是Python中最不常用、最為誤解的語(yǔ)法特性之一
    2016-02-02
  • 詳解Django-channels 實(shí)現(xiàn)WebSocket實(shí)例

    詳解Django-channels 實(shí)現(xiàn)WebSocket實(shí)例

    這篇文章主要介紹了詳解Django-channels實(shí)現(xiàn)WebSocket實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python Process多進(jìn)程實(shí)現(xiàn)過程

    Python Process多進(jìn)程實(shí)現(xiàn)過程

    這篇文章主要介紹了Python Process多進(jìn)程實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 關(guān)于Python中Inf與Nan的判斷問題詳解

    關(guān)于Python中Inf與Nan的判斷問題詳解

    這篇文章主要介紹了關(guān)于Python中Inf與Nan的判斷問題,文中介紹的很詳細(xì),對(duì)大家具有一定的參考價(jià)值,有需要的朋友們下面來(lái)一起看看吧。
    2017-02-02
  • python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及雙端隊(duì)列

    python數(shù)據(jù)結(jié)構(gòu)之棧、隊(duì)列及雙端隊(duì)列

    在上一章的學(xué)習(xí)中,我們主要學(xué)習(xí)了怎么去衡量一個(gè)算法的好壞,比較常見的方式是使用大O記法,就是所謂的時(shí)間復(fù)雜度,這一章節(jié)我來(lái)學(xué)習(xí)基本的數(shù)據(jù)結(jié)構(gòu),如棧、隊(duì)列和雙端隊(duì)列等等。感興趣的小伙伴可以參考一下
    2021-12-12
  • python3實(shí)現(xiàn)無(wú)權(quán)最短路徑的方法

    python3實(shí)現(xiàn)無(wú)權(quán)最短路徑的方法

    這篇文章主要介紹了python3實(shí)現(xiàn)無(wú)權(quán)最短路徑的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Python實(shí)現(xiàn)視頻轉(zhuǎn)換為字符畫詳解

    Python實(shí)現(xiàn)視頻轉(zhuǎn)換為字符畫詳解

    這篇文章主要介紹了如何通過Python實(shí)現(xiàn)讀取視頻并將其轉(zhuǎn)換為字符畫的示例代碼,文中講解詳細(xì),對(duì)我們的學(xué)習(xí)和工作有一點(diǎn)的價(jià)值,感興趣的小伙伴可以了解一下
    2021-12-12
  • 深入講解Python中的上下文管理器和with語(yǔ)句

    深入講解Python中的上下文管理器和with語(yǔ)句

    這篇文章主要為大家介紹了Python中的上下文管理器和with語(yǔ)句的深入講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • python手機(jī)號(hào)前7位歸屬地爬蟲代碼實(shí)例

    python手機(jī)號(hào)前7位歸屬地爬蟲代碼實(shí)例

    這篇文章主要介紹了python手機(jī)號(hào)前7位歸屬地爬蟲代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 簡(jiǎn)單了解python調(diào)用其他腳本方法實(shí)例

    簡(jiǎn)單了解python調(diào)用其他腳本方法實(shí)例

    這篇文章主要介紹了簡(jiǎn)單了解python調(diào)用其他腳本方法實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論