国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

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

這篇具有很好參考價值的文章主要介紹了Python的getter和setter的方法使用詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

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

  1. 解釋setter和getter的使用方法
  2. 解釋@property裝飾器的妙用

    在python中,setter和getter方法并不像其它編程語言中的那樣。基本上,在面向?qū)ο缶幊陶Z言中,使用setter和getter方法的主要目的是為了確保數(shù)據(jù)的封裝。不像其它面向?qū)ο缶幊陶Z言,python中的私有變量并不是真正的隱藏字段。在python中,通常在以下情況會用到setter和getter方法:

  • 在獲取或者設(shè)置屬性值的時候使用setter和getter方法為其添加驗證邏輯
  • 避免對類的某些字段直接訪問,比如類的私有變量不應(yīng)該被外部調(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方法設(shè)置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è)置屬性值的函數(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
    
    # 設(shè)置屬性_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)了對屬性賦值時的有效性檢查。文章來源地址http://www.zghlxwxcb.cn/news/detail-410957.html

到了這里,關(guān)于Python的getter和setter的方法使用詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Vue之?dāng)?shù)據(jù)代理(getter、setter)

    Vue之?dāng)?shù)據(jù)代理(getter、setter)

    Object.defineProperty 數(shù)據(jù)代理 (1)實例對象可以通過Object.defineProperty()方法來添加屬性,但是添加的屬性默認(rèn)不能刪除,不能枚舉(不可被遍歷),不能修改等。該方法中有g(shù)et函數(shù)和set函數(shù),當(dāng)有人讀取添加的該屬性,get函數(shù)就會被調(diào)用,當(dāng)有人修改添加的的屬性時,set函數(shù)就

    2024年02月06日
    瀏覽(19)
  • Java---使用lombok簡化實體類的編寫----不要再寫getter+sertter方法了

    目錄 使用lombok簡化實體類的編寫 首先: 加入lombok依賴: 然后 加上一個注解:@Data? ? 刪除原來實體類中的方法 加上一個注解:@Data? ? 注意:@Data(包含了:@Setter @Getter @ToString @EqualsAndHashCode)但是 不包含構(gòu)造方法的注解可以手動加上: @NoArgsConstructor @AllArgsConstructor

    2024年02月14日
    瀏覽(32)
  • vue之vuex的getters詳解

    vue之vuex的getters詳解

    1.getters:類似是Vuex中的計算屬性,也具有緩存功能:如果state中的數(shù)據(jù)得到了改變,那么getters中的屬性的值也會發(fā)生改變,如果state的值沒有發(fā)生任何變化,那么getters中的屬性,的值就不會發(fā)生改變 (1)例如state里有個list數(shù)據(jù): (2)再gitters里通過filter方法過濾出需要的數(shù)

    2024年02月07日
    瀏覽(17)
  • 【Spring】三大依賴注入(@Autowired,Setter,構(gòu)造方法)

    【Spring】三大依賴注入(@Autowired,Setter,構(gòu)造方法)

    目錄 一、屬性注入(@Autowired) 1.1 優(yōu)點分析 1.2 缺點分析 1.2.1 無法實現(xiàn)final修飾的變量注入。 1.2.2 兼容性不好 1.2.3 (可能違背)設(shè)計原則問題 1.2.4 代碼舉例: 1.2.5 出現(xiàn)循環(huán)依賴該怎么辦? 1.2.6 @Resource與@Autowired的區(qū)別 二、Setter注入 2.1 優(yōu)點分析 2.2 缺點分析 2.2.1 不能注入不

    2024年02月01日
    瀏覽(24)
  • Python property、setter、deleter

    面向?qū)ο蠓庋b特點之一就是通過實現(xiàn)好的方法來訪問,限制對數(shù)據(jù)的不合理訪問,把對象狀態(tài)私有化,僅供類的內(nèi)部進行操作 下方示例,Test方法的number屬性類實例的時候傳遞1,number是一個公開屬性,可以在外部任意修改、訪問,沒有對屬性進行進行約束 @property @property的作用是聲

    2023年04月11日
    瀏覽(25)
  • 將GPU版本的torch和torchvision下載至本地進行安裝,解決torch.cuda.is_available()為False的情況,本文主要解決CPU版本的torch問題。

    將GPU版本的torch和torchvision下載至本地進行安裝,解決torch.cuda.is_available()為False的情況,本文主要解決CPU版本的torch問題。

    這是困擾我很久的問題,今天花了一點時間去研究一下為什么我的cuda和cudann安裝完成了,卻不能使用GPU,原因是我的torch和torchvision是cpu版本的,必須下載GPU版本的才能使torch.cuda.is_available()為True,本文使用將文件下載到文件夾后進行安裝。 1、打開Anaconda Prompt(Anaconda3) ?2、打開

    2024年02月10日
    瀏覽(22)
  • Vue中$nextTick主要作用、原理及使用方法

    Vue中$nextTick主要作用、原理及使用方法

    查看本專欄目錄 關(guān)于作者 還是大劍師蘭特 :曾是美國某知名大學(xué)計算機專業(yè)研究生,現(xiàn)為航空航海領(lǐng)域高級前端工程師;CSDN知名博主,GIS領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技術(shù)開發(fā),歡迎加底部微信,一起交流。 熱門推薦 內(nèi)容鏈接

    2024年02月21日
    瀏覽(47)
  • 大語言模型(LLM)綜述(五):使用大型語言模型的主要方法

    大語言模型(LLM)綜述(五):使用大型語言模型的主要方法

    隨著人工智能和機器學(xué)習(xí)領(lǐng)域的迅速發(fā)展,語言模型已經(jīng)從簡單的詞袋模型(Bag-of-Words)和N-gram模型演變?yōu)楦鼮閺?fù)雜和強大的神經(jīng)網(wǎng)絡(luò)模型。在這一進程中,大型語言模型(LLM)尤為引人注目,它們不僅在自然語言處理(NLP)任務(wù)中表現(xiàn)出色,而且在各種跨領(lǐng)域應(yīng)用中也展示

    2024年02月06日
    瀏覽(23)
  • Win11新建不了文本文檔?Win11右鍵無法新建文本文檔的解決方法

    Win11新建不了文本文檔?Win11右鍵無法新建文本文檔的解決方法

    ?Win11系統(tǒng)具有穩(wěn)定、速度快、系統(tǒng)干凈等特點,深受用戶的喜愛,但是在使用中難免會出現(xiàn)一些問題,就比如右鍵無法新建文本文檔的情況,出現(xiàn)這一情況的原因很有可能是由于系統(tǒng)文件缺失問題,對此我們一起來看看小編是如何解決的吧。 還有詳細(xì)的一鍵重裝系統(tǒng)方法

    2024年02月08日
    瀏覽(33)
  • 詳解Python中的split()函數(shù)的使用方法

    函數(shù):split() Python中有split()和os.path.split()兩個函數(shù),具體作用如下: split():拆分字符串。通過指定分隔符對字符串進行切片,并返回分割后的字符串列表(list) os.path.split():按照路徑將文件名和路徑分割開 一、函數(shù)說明 1、split()函數(shù) 語法:str.split(str=\\\"\\\",num=string.count(str))

    2024年02月07日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包