標籤:表示 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基礎===類的私人屬性(偽私人)