c++/c#中 私有化
c++/c#中類中的變量可通過關(guān)鍵字 public,protected,private等控制內(nèi)部類的各項權(quán)限
python私有化
python中用下劃線控制變量權(quán)限
①不加下劃線,如(count): 表示公有變量,可以在類內(nèi)部和外部訪問
②前置單下劃線(如count):表示私有化屬性和方法,應(yīng)該被視為API中非公開的部分(不管是函數(shù)、方法還是數(shù)據(jù)成員),那么以“”開頭的名稱都不會被導(dǎo)入,除非模塊或包中的“all”列表顯式地包含了它們
③前置雙下劃線(如 _count):Python中的這種用法是為了避免與子類定義的名稱沖突,無法在類外部訪問(原因:name mangling名字重整),單下劃線是Python程序員使用類時的約定,表明程序員不希望類的用戶直接訪問屬性。僅僅是一種約定!實際上,實例.變量,可以被訪問
④名稱前后的雙下劃線(如init):表示Python中特殊的方法名,"魔法函數(shù)"
>>> class A(object):
... def _internal_use(self):
... pass
... def __method_name(self):
... pass
...
>>> dir(A())
['_A__method_name', ..., '_internal_use']
#名字重整 _method_name 變成 "_類名_method_name"
#'_internal_use未變
如果創(chuàng)建A的一個子類B,那么你將不能輕易地覆寫A中的方法“__method_name”。
>>> class B(A):
... def __method_name(self):
... pass
...
>>> dir(B())
['_A__method_name', '_B__method_name', ..., '_internal_use']
1
2
3
4
5
6
>>> class B(A):
... def __method_name(self):
... pass
...
>>> dir(B())
['_A__method_name', '_B__method_name', ..., '_internal_use']