美文网首页
python变量私有化

python变量私有化

作者: Pello_Luo | 来源:发表于2017-11-05 23:41 被阅读0次
    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']
    

    相关文章

      网友评论

          本文标题:python变量私有化

          本文链接:https://www.haomeiwen.com/subject/wjqkmxtx.html