亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python實現封裝的方法

發布時間:2020-07-20 10:53:17 來源:億速云 閱讀:198 作者:清晨 欄目:編程語言

這篇文章主要介紹python實現封裝的方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

Python 并沒有提供類似于其他語言的 private 等修飾符,因此 Python 并不能真正支持隱藏。為了隱藏類中的成員,Python 玩了一個小

技巧:只要將 Python 類的成員命名為以雙下畫線開頭的,Python 就會把它們隱藏起來。

推薦:Python教程

例如,如下程序示范了 Python 的封裝機制:

class User :
    def __hide(self):
        print('示范隱藏的hide方法')
    def getname(self):
        return self.__name
    def setname(self, name):
        if len(name) < 3 or len(name) > 8:
            raise ValueError('用戶名長度必須在3~8之間')
        self.__name = name
    name = property(getname, setname)
    def setage(self, age):
        if age < 18 or age > 70:
            raise ValueError('用戶名年齡必須在18在70之間')
        self.__age = age
    def getage(self):
        return self.__age
    age = property(getage, setage)
# 創建User對象
u = User()
# 對name屬性賦值,實際上調用setname()方法
u.name = 'fk' # 引發 ValueError: 用戶名長度必須在3~8之間

上面程序將 User 的兩個實例變量分別命名為 __name 和 __age,這兩個實例變量就會被隱藏起來,這樣程序就無法直接訪問 __name、__age 變量,只能通過 setname()、getname()、setage()、getage() 這些訪問器方法進行訪問,而 setname()、setage() 會對用戶設置的 name、age 進行控制,只有符合條件的 name、age 才允許設置。

上面程序嘗試將 User 對象的 name 設為 fk,這個字符串的長度為“2”不符合實際要求,因此運行程序最后一行包含如下錯誤:

ValueError:用戶名長度必須在3-8之間

將最后一行代碼注釋掉,并在程序尾部添加如下代碼:

u.name = 'fkit'
u.age = 25
print(u.name) # fkit
print(u.age) # 25

此時程序對 name、age 所賦的值都符合要求,因此上面兩行賦值語句完全可以正常運行。運行上面代碼,可以看到如下輸出結果:

fkit
25

從該程序可以看出封裝的好處,程序可以將 User 對象的實現細節隱藏起來,程序只能通過暴露出來的 setname()、setage() 方法來改變 User 對象的狀態,而這兩個方法可以添加自己的邏輯控制,這種控制對 User 的修改始終是安全的。上面程序還定義了一個 __hide() 方法,這個方法默認是隱藏的。如果程序嘗試執行如下代碼:

# 嘗試調用隱藏的__hide()方法
u.__hide()

將會提示如下錯誤:

AttributeError:'User' object has no attribute 'hide'

最后需要說明的是,Python 其實沒有真正的隱藏機制,雙下畫線只是 Python 的一個小技巧,Python 會“偷偷”地改變以雙下畫線開頭的方法名,會在這些方法名前添加單下畫線和類名。因此上面的 __hide() 方法其實可以按如下方式調用(通常并不推薦這么干):

# 調用隱藏的__hide()方法
u._User__hide()

運行上面代碼,可以看到如下輸出結果:

示范隱藏的hide方法

通過上面調用可以看出,Python 并沒有實現真正的隱藏。

類似的是,程序也可通過為隱藏的實例變量添加下畫線和類名的方式來訪問或修改對象的實例變量。例如如下代碼:

# 對隱藏的__name屬性賦值
u._User__name = 'fk'
# 訪問User對象的name屬性(實際上訪問__name實例變量)
print(u.name)

以上是python實現封裝的方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

漾濞| 上蔡县| 冕宁县| 凉山| 金沙县| 阳西县| 商城县| 永春县| 黑河市| 滦平县| 武穴市| 辛集市| 宜昌市| 前郭尔| 南通市| 蕲春县| 青海省| 柳林县| 南乐县| 壤塘县| 武强县| 林甸县| 沈丘县| 新津县| 汉源县| 清镇市| 保靖县| 焦作市| 常熟市| 滦平县| 皋兰县| 穆棱市| 六盘水市| 南丹县| 三门县| 新竹县| 焉耆| 宜川县| 宿松县| 弥渡县| 涿州市|