中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Pythonproperty函數(shù)如何定義屬性-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、虛擬空間、營銷軟件、網(wǎng)站建設、扶溝網(wǎng)站維護、網(wǎng)站推廣。

這篇文章將為大家詳細講解有關Python property函數(shù)如何定義屬性,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

如果為 Python 類定義了 getter、setter 等訪問器方法,則可使用 property() 函數(shù)將它們定義成屬性(相當于實例變量)。

property() 函數(shù)的語法格式如下:

property(fget=None, fset=None, fdel=None, doc=None)

從上面的語法格式可以看出,在使用 property() 函數(shù)時,可傳入 4 個參數(shù),分別代表 getter 方法、setter 方法、del 方法和 doc,其中 doc 是一個文檔字符串,用于說明該屬性。

當然,開發(fā)者調用 property 也可傳入 0 個(既不能讀,也不能寫的屬性)、1 個(只讀屬性)、2 個(讀寫屬性)、3 個(讀寫屬性,也可刪除)和 4 個(讀寫屬性,也可刪除,包含文檔說明)參數(shù)。

例如,如下程序定義了一個 Rectangle 類,該類使用 property() 函數(shù)定義了一個 size 屬性:

class Rectangle:
    # 定義構造方法
    def __init__(self, width, height):
        self.width = width
        self.height = height
    # 定義setsize()函數(shù)
    def setsize (self , size):
        self.width, self.height = size
    # 定義getsize()函數(shù)
    def getsize (self):
        return self.width, self.height
     # 定義getsize()函數(shù)
    def delsize (self):
        self.width, self.height = 0, 0 
    # 使用property定義屬性
    size = property(getsize, setsize, delsize, '用于描述矩形大小的屬性')
# 訪問size屬性的說明文檔
print(Rectangle.size.__doc__)
# 通過內置的help()函數(shù)查看Rectangle.size的說明文檔
help(Rectangle.size)
rect = Rectangle(4, 3)
# 訪問rect的size屬性
print(rect.size) # (4, 3)
# 對rect的size屬性賦值
rect.size = 9, 7
# 訪問rect的width、height實例變量
print(rect.width) # 9
print(rect.height) # 7
# 刪除rect的size屬性
del rect.size
# 訪問rect的width、height實例變量
print(rect.width) # 0
print(rect.height) # 0

程序中,使用 property() 函數(shù)定義了一個 size 屬性,在定義該屬性時一共傳入了 4 個參數(shù),這意味著該屬性可讀、可寫、可刪除,也有說明文檔。所以,該程序嘗試對 Rectangle 對象的 size 屬性進行讀、寫、刪除操作,其實這種讀、寫、刪除操作分別被委托給 getsize()、setsize() 和 delsize() 方法來實現(xiàn)。
運行上面程序,將會看到如下輸出結果:

用于描述矩形大小的屬性
Help on property:

    用于描述矩形大小的屬性

(4, 3)
9
7
0
0

在使用 property() 函數(shù)定義屬性時,也可根據(jù)需要只傳入少量的參數(shù)。例如,如下代碼使用 property() 函數(shù)定義了一個讀寫屬性,該屬性不能刪除:

class User :
    def __init__ (self, first, last):
        self.first = first
        self.last = last
    def getfullname(self):
        return self.first + ',' + self.last
    def setfullname(self, fullname):
        first_last = fullname.rsplit(',');
        self.first = first_last[0]
        self.last = first_last[1]
    # 使用property()函數(shù)定義fullname屬性,只傳入2個參數(shù)
    # 該屬性是一個讀寫屬性,但不能刪除
    fullname = property(getfullname, setfullname)
u = User('悟空', '孫')
# 訪問fullname屬性
print(u.fullname)
# 對fullname屬性賦值
u.fullname = '八戒,朱'
print(u.first)
print(u.last)

此程序中使用 property() 定義了 fullname 屬性,該程序使用 property() 函數(shù)時只傳入兩個參數(shù),分別作為 getter 和 setter方法,因此該屬性是一個讀寫屬性,不能刪除。

運行上面程序,將看到如下輸出結果:

悟空,孫
八戒
朱

在某些編程語言中,類似于這種 property 合成的屬性被稱為計算屬性。這種屬性并不真正存儲任何狀態(tài),它的值其實是通過某種算法計算得到的。當程序對該屬性賦值時,被賦的值也會被存儲到其他實例變量中。

還可使用 @property 裝飾器來修飾方法,使之成為屬性。例如如下程序:

class Cell:
    # 使用@property修飾方法,相當于為該屬性設置getter方法
    @property
    def state(self):
        return self._state
    # 為state屬性設置setter方法
    @state.setter
    def state(self, value):
        if 'alive' in value.lower():
            self._state = 'alive'
        else:
            self._state = 'dead'
    # 為is_dead屬性設置getter方法
    # 只有getter方法屬性是只讀屬性
    @property
    def is_dead(self):
        return not self._state.lower() == 'alive'
c = Cell()
# 修改state屬性
c.state = 'Alive'
# 訪問state屬性
print(c.state)
# 訪問is_dead屬性
print(c.is_dead)

上面程序中第 3 行代碼使用 @property 修飾了 state() 方法,這樣就使得該方法變成了 state 屬性的 getter 方法。如果只有該方法,那么 state 屬性只是一個只讀屬性。

當程序使用 @property 修飾了 state 屬性之后,又多出一個 @state.setter 裝飾器,該裝飾器用于修飾 state 屬性的 setter 方法,如上面程序中第 7 行代碼所示。這樣 state 屬性就有了 getter 和 setter 方法,state 屬性就變成了讀寫屬性。

程序中第 15 行代碼使用 @property 修飾了 is_dead 方法,該方法就會變成 is_dead 屬性的 getter 方法。此處同樣會多出一個 @is_dead.setter 裝飾器,但程序并未使用該裝飾器修飾 setter 方法,因此 is_dead 屬性只是一個只讀屬性。

運行上面程序,將看到如下輸出結果:

alive
False

關于Python property函數(shù)如何定義屬性就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

網(wǎng)頁名稱:Pythonproperty函數(shù)如何定義屬性-創(chuàng)新互聯(lián)
當前鏈接:http://www.rwnh.cn/article30/cseppo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、做網(wǎng)站域名注冊、靜態(tài)網(wǎng)站微信小程序、App設計

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營
大城县| 金坛市| 福泉市| 乐平市| 当阳市| 元谋县| 台湾省| 安吉县| 溧水县| 乌拉特中旗| 临沂市| 贡嘎县| 宁国市| 资讯| 闸北区| 石家庄市| 阿拉尔市| 郯城县| 鹤峰县| 三穗县| 长沙县| 剑河县| 昆山市| 方正县| 龙川县| 南宁市| 抚顺市| 常德市| 玛多县| 大英县| 阳原县| 巴塘县| 兰坪| 长沙县| 丹棱县| 溧阳市| 景泰县| 长兴县| 盘山县| 禹州市| 京山县|