當前位置:
首頁 > 最新 > 如何利用Python實現許可權設置?有些人只怕連這個操作都沒想到過!

如何利用Python實現許可權設置?有些人只怕連這個操作都沒想到過!

一、私有化的實現

在Python中想定義一個類是比較簡單的,比如要定義一個Person類,如下代碼即可:

當然我們也可以給類添加相應的屬性,比如Person的姓名,年齡,性別等,並且在new一個Person對象後可以對這些屬性進行修改,如下代碼所示:

Python是面向對象的語言,我們都知道面向對象的三大特點:繼承、封裝和多態。而在上面的代碼中,我們可以輕易地通過person. 調用屬性來訪問和修改值,這明顯不符合面向對象中封裝的思想。比如對於Person類中的年齡屬性,可能比較私人,所以我們不希望可以任意的訪問和修改它的值。在Java中,我們是通過private關鍵字來裝飾屬性私有,那麼在Python中有沒有類似的關鍵字呢?顯然是有的,在Python中採取在變數名前加__(兩個下劃線)的方式來將屬性私有。如下代碼所示:

初看上面的代碼,似乎感覺並沒有達到私有的目的,因為我們通過p1.age還是成功地進行了賦值,程序並沒有報錯。其實這裡是因為Python可以動態地給對象增加屬性和方法,這句話相當於動態地給p1這個對象增加了一個age屬性。所以在我們做了賦值操作之後,我們再次列印p1,age的值依然是18。說明我們確實已經將類里的age屬性進行的私有。同理方法的私有也是一樣的處理。

二、私有化的注意事項

在Python中,有幾種方式來定義變數:

1、以單劃線開頭:這種類型的變數可以通過對象.調用,但是它表示的意思是我可以調用,但請把我視為是私有的。而且如果是通過from xxx_module import *是無法訪問的,但是如果是import xxx_module的方式,則可以訪問到,類對象和子類也都可以訪問。

2、僅以雙劃線開頭:這種類型的變數就是私有。但是它可以通過__類名__變數名來訪問,但強烈建議不要這樣做

3、以雙劃線開頭,並以它結尾:這種類型的變數在Python中通常都表示具有特殊意義的變數,比如__init__,__str__等。所以我們在定義變數時不要這樣定義

4、僅以單劃線結尾:這種類型的變數是用於避免與Python關鍵字進行衝突所採取的一種解決辦法

如下圖演示訪問許可權效果:

三、property的使用

上面的介紹了,通過加雙劃線開頭的方式實現了變數和方法。參照在學Java時的思路,如果想要訪問私有變數,我們會給變數添加get和set方法。同樣我們在Python中也是一樣的處理,代碼如下所示:

但是這樣看著似乎不是很方便,每次都要調用一個方法。有沒有可能像之前一樣調用p1. age = 28就能直接賦值呢?顯然在Python中是可以的,這就要用到property。

property的定義:

使用代碼示例:

說明:

1. property接受四個參數,分別是get, set, del, doc,前三個參數分別對應get方法,set方法,del方法,順序不能出錯。最後一個參數是doc,相當於對方法進行說明。

2. property返回一個property屬性,返回值的變數名與最終對象. 後面的名稱是一致的

觀察上面的代碼,我們仍然需要多寫一行property的代碼,而Python其實提供了一個更方便的實現方式來達到上述要求,即使用@property。說明如下:

示例代碼如下:

說明:

1. @property相當於對age方法進行了一個裝飾,它使得我們能通過對象.方法名來調用對應的屬性

2. @property所裝飾的方法名與對象 . 調用的名稱要保持一致

3. @property會生成另外的裝飾器,@方法名.setter, @方法名.getter, @方法名.deleter,分別對應set, get, del方法。這裡get方法用得很少,因為已經通過@property直接對應到了get方法


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

左手 Python,右手 R 玩轉數據分析
13條Python2.x和3.x的區別,你知道幾條?

TAG:Python |