<dl id="opymh"></dl>

<div id="opymh"></div>
      <div id="opymh"><tr id="opymh"></tr></div>

        <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

        <em id="opymh"></em>

        <em id="opymh"><ol id="opymh"></ol></em>

              頻道欄目
              首頁 > 程序開發 > Web開發 > Python > 正文
              利用Python實現權限設置的詳細教程
              2018-07-27 14:40:35         來源: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數據分析之numpy基礎代碼展示
              下一篇:python數據分析之pandas實例解析
              相關文章
              圖文推薦
              點擊排行

              關于我們 | 聯系我們 | 廣告服務 | 投資合作 | 版權申明 | 在線幫助 | 網站地圖 | 作品發布 | Vip技術培訓 | 舉報中心

              版權所有: 紅黑聯盟--致力于做實用的IT技術學習網站

              极速飞艇好假
              <dl id="opymh"></dl>

              <div id="opymh"></div>
                  <div id="opymh"><tr id="opymh"></tr></div>

                    <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                    <em id="opymh"></em>

                    <em id="opymh"><ol id="opymh"></ol></em>

                          <dl id="opymh"></dl>

                          <div id="opymh"></div>
                              <div id="opymh"><tr id="opymh"></tr></div>

                                <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                                <em id="opymh"></em>

                                <em id="opymh"><ol id="opymh"></ol></em>