python变量私有化
2017-11-05 本文已影响0人
Pello_Luo
c++/c#中 私有化
c++/c#中类中的变量可通过关键字 public,protected,private等控制内部类的各项权限
python私有化
python中用下划线控制变量权限
①不加下划线,如(count): 表示公有变量,可以在类内部和外部访问
②前置单下划线(如count):表示私有化属性和方法,应该被视为API中非公开的部分(不管是函数、方法还是数据成员),那么以“”开头的名称都不会被导入,除非模块或包中的“all”列表显式地包含了它们
③前置双下划线(如 _count):Python中的这种用法是为了避免与子类定义的名称冲突,无法在类外部访问(原因:name mangling名字重整),单下划线是Python程序员使用类时的约定,表明程序员不希望类的用户直接访问属性。仅仅是一种约定!实际上,实例.变量,可以被访问
④名称前后的双下划线(如init):表示Python中特殊的方法名,"魔法函数"
>>> 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未变
如果创建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']