python基礎===類的私人屬性(偽私人)

來源:互聯網
上載者:User

標籤:表示   self   私人變數   size   方式   通過   不同   code   注意   

說在前面的一點:

 

python明明有私人的定義方法就是在變數或者方法的面前加上雙下滑線__,這個實際上是python的偽私人。只是一種程式員約定俗稱的規定,加了就表示私人變數,但是你如果要在外部調用的話,還是可以調用的。

 

Python並沒有真正的私人化支援,但可用底線得到偽私人


   (1)_xxx      "單底線 " 開始的成員變數叫做保護變數,意思是只有類對象(即類執行個體)和子類對象自己能訪問到這些變數,需通過類提供的介面進行訪問;不能用‘from module import *‘匯入


   (2)__xxx    類中的私人變數/方法名 (Python的函數也是對象,所以成員方法稱為成員變數也行得通。)," 雙底線 " 開始的是私人成員,意思是只有類對象自己能訪問,連子類對象也不能訪問到這個資料。


   (3)__xxx__ 系統定義名字,前後均有一個“雙底線” 代表python裡特殊方法專用的標識,如 __init__() 代表類的建構函式。

 

class B:    def __init__(self):        self.__private = 0        self._private=1    def __private_method(self):        pass    def public_method(self):        pass        self.__private_method()    b = B()#print(b.__private)  #雙底線,訪問不到資料print(b._private)       #單底線,可以訪問到

 

還有注意的一點是,並不是說私人屬性就不能被訪問到,比如

 

class B:    def __init__(self):        self.__private1 = 100        self._private2=99    def __private_method(self):        pass    def public_method(self):        pass        self.__private_method()b = B()#print(b.__private1)  #雙底線,訪問不到資料print(b._private2)       #單底線,可以訪問到print(b._B__private1

私人變數:執行個體._類名__變數名
私人方法:執行個體._類名__方法名()

 

所以說這隻是一種偽私人,只是一種程式員約定俗稱的規定。

 

上面提到有兩種不同的編碼約定(單底線和雙底線) 來命名私人屬性,那麼問題就來了:到底哪種方式好呢?大多數而言,應該讓你的非公用名稱以單底線開頭。但是,如果你清楚代碼會涉及到子類,並且有些內部屬性應該在子類中隱藏起來,那麼才考慮使用雙底線方案。

python基礎===類的私人屬性(偽私人)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.