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

Python中的getter和setter的方法使用詳解

 更新時間:2022年12月06日 14:26:47   作者:惡霸程序員388  
基本上,在面向?qū)ο缶幊陶Z言中,使用setter和getter方法的主要目的是為了確保數(shù)據(jù)的封裝,這篇文章主要介紹了Python的getter和setter的方法使用詳解,需要的朋友可以參考下

本文主要內(nèi)容:

  • 解釋setter和getter的使用方法解釋@property裝飾器的妙用
  • 在python中,setter和getter方法并不像其它編程語言中的那樣?;旧?,在面向?qū)ο缶幊陶Z言中,使用setter和getter方法的主要目的是為了確保數(shù)據(jù)的封裝。不像其它面向?qū)ο缶幊陶Z言,python中的私有變量并不是真正的隱藏字段。在python中,通常在以下情況會用到setter和getter方法:
  • 在獲取或者設置屬性值的時候使用setter和getter方法為其添加驗證邏輯避免對類的某些字段直接訪問,比如類的私有變量不應該被外部調(diào)用者直擊訪問或者修改

使用普通函數(shù)實現(xiàn)setter和getter方法
要實現(xiàn)setter和getter屬性,只是定義普通方法get()和set()并不能反產(chǎn)生任何特殊的行為,例如:

class Student(object):
    def __int(self, age=0):
        self._age = age
    
    # getter方法
    def get(self):
        return self._age
    
    # setter方法
    def set(self, value):
        self._age = value
        
xiaoming = Student()
# 使用setter方法設置age
xiaoming.set(20)
# 使用getter方法返回age
print(xiaoming.get())
print(xiaoming._age)

輸出:

20
20

在上面代碼中,set_age()和get_age()方法與普通方法并沒有什么兩樣,那么如何實現(xiàn)像getter和setter一樣的功能呢?這就要用到python中的特殊方法property()。

使用property()方法來實現(xiàn)setter和getter的行為
property()是python中的一個內(nèi)置方法,它創(chuàng)建并返回一個屬性對象。一個屬性對象有三個方法,getter()、setter()和delete()。property()內(nèi)置方法有四個參數(shù),property(fget,fset, fdel, doc)。fget是一個用于獲取屬性值的函數(shù),fset是一個用于設置屬性值的函數(shù),fdel是一個用于刪除屬性的函數(shù),doc用于為屬性創(chuàng)建文檔說明。一個屬性兌現(xiàn)有三個方法,getter()、setter()和delete()分別制定fget、fset、fdel。

class Adult(object):
    def __int(self):
        self.__age = 0
    
    # 獲取屬性_age的值
    def get_age(self):
        print('getter() method called')
        return self.__age
    
    # 設置屬性_age的值
    def set_age(self, value):
        print('setter() method called')
        self.__age = value
    
    # 刪除屬性_age
    def del_age(self):
        del self.__age
        
    age = property(get_age, set_age, del_age)

laowang = Adult()
laowang.age = 60
print(laowang.age)

輸出:

setter() method called
getter() method called
60

在上面的代碼中,age就是一個屬性對象,它保證了對私有變量的安全訪問。

使用@property裝飾器來實現(xiàn)setter和getter的行為
除了上面使用property()的方法來實現(xiàn)getter、setter方法的行為,在python中還可以裝飾器@property來實現(xiàn)。@property是python的一個內(nèi)置裝飾器,使用裝飾器的目的是改變類的方法或者屬性,這樣調(diào)用者就無需在代碼中做任何改動。

class Adult(object):    
    def __init__(self):
        self.__age = 0
    
    @property
    def age(self):
        print('getter() method called')
        return self.__age
        
    @age.setter
    def age(self, value):
        if value < 18:
            raise ValueError('Sorry, you are a child, games not allowed')
        print('setter() method called')
        self.__age = value
        
xiaoli = Adult()
xiaoli.age = 19
print(xiaoli.age)

輸出:

setter() method called
getter() method called
19

上面的代碼清晰地展示了如何用pythonic的方式使用@property裝飾器實現(xiàn)setter和getter屬性。同時實現(xiàn)了對屬性賦值時的有效性檢查。

到此這篇關于Python的getter和setter的方法使用詳解的文章就介紹到這了,更多相關Python的getter和setter的方法使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python3監(jiān)控CentOS磁盤空間腳本

    python3監(jiān)控CentOS磁盤空間腳本

    這篇文章主要為大家詳細介紹了Python3監(jiān)控CentOS磁盤空間腳本,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Python編輯和運行的四種方式

    Python編輯和運行的四種方式

    本篇內(nèi)容主要是講python在電腦上編輯和運行的幾種不同方式,后面主要是在pycharm中去寫代碼,然后運行,其實還有其他的方式可以在電腦上寫python代碼和運行python代碼,需要的朋友可以參考下
    2024-08-08
  • python批量創(chuàng)建變量并賦值操作

    python批量創(chuàng)建變量并賦值操作

    這篇文章主要介紹了python批量創(chuàng)建變量并賦值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python安裝Scrapy庫的常見報錯解決

    Python安裝Scrapy庫的常見報錯解決

    本文主要介紹了Python安裝Scrapy庫的常見報錯解決,文中通過圖文示例介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • 淺談Python中的正則表達式

    淺談Python中的正則表達式

    正則表達式廣泛用于與文字、字符串的格式化,放到Python里使用,再合適不過.尤其是在編寫爬蟲時,用正則表達式匹配URL、匹配IP等,正則表達式都是一個簡單、高效的選擇,需要的朋友可以參考下
    2021-06-06
  • Python 線程池模塊之多線程操作代碼

    Python 線程池模塊之多線程操作代碼

    最近在做一個爬蟲相關的項目,單線程的整站爬蟲,耗時真的不是一般的巨大,運行一次也是心累,所以,要想實現(xiàn)整站爬蟲,多線程是不可避免的,那么python多線程又應該怎樣實現(xiàn)呢?今天小編給大家分享下實現(xiàn)代碼,感興趣的朋友一起看看吧
    2021-05-05
  • Python基于域相關實現(xiàn)圖像增強的方法教程

    Python基于域相關實現(xiàn)圖像增強的方法教程

    當在圖像上訓練深度神經(jīng)網(wǎng)絡模型時,通過對由數(shù)據(jù)增強生成的更多圖像進行訓練,可以使模型更好地泛化。本文將為大家介紹Python基于域相關的圖像增強實現(xiàn)方法,需要的可以了解一下
    2022-01-01
  • python進階教程之動態(tài)類型詳解

    python進階教程之動態(tài)類型詳解

    這篇文章主要介紹了python進階教程之動態(tài)類型詳解,動態(tài)類型是動態(tài)語言的特性,本文對多種動態(tài)類型應用做了講解,需要的朋友可以參考下
    2014-08-08
  • 中秋將至利用python畫一些月餅從天而降不用買了

    中秋將至利用python畫一些月餅從天而降不用買了

    中秋沒兩天就要到了,今天小編就利用python畫個月餅的小游戲,文中內(nèi)容非常詳細,感興趣的小伙伴一定要收藏起來送給遠方的朋友呀
    2021-09-09
  • 如何用python給數(shù)據(jù)加上高斯噪聲

    如何用python給數(shù)據(jù)加上高斯噪聲

    這篇文章主要介紹了如何用python給數(shù)據(jù)加上高斯噪聲問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05

最新評論

扶余县| 永德县| 文成县| 邓州市| 铅山县| 宾阳县| 曲周县| 同江市| 新兴县| 石嘴山市| 库伦旗| 锡林郭勒盟| 大宁县| 桑植县| 金秀| 成安县| 松滋市| 承德市| 石渠县| 宾川县| 黑水县| 双桥区| 苏尼特左旗| 沈阳市| 涪陵区| 寻乌县| 旌德县| 玉山县| 大渡口区| 综艺| 河池市| 宝清县| 青州市| 彭泽县| 额尔古纳市| 柳州市| 通辽市| 库车县| 宣城市| 沈阳市| 济南市|