zoukankan      html  css  js  c++  java
  • Python中的名字隐藏

    Python对于module文件中的name是没有private和public区分的,严格来说,在module文件重定义的任何name,都可以被外界访问。但是,对于 from module imort * 语法,Python提供了隐藏name的方法。

    _X命名

    如果module文件中的name使用单下划线做前缀命名,那么,from module import *语法无法导入这些name。假设有如下Python module文件, test.py:

    _a = 9
    __b = 99        # 双下划线开头
    c = 999
    d = 9999

    那么,使用 from test import * 语句,导入不了_a,__b,但是可以访问c和d:

    >>>from test import *
    >>>_a
    NameError: name '_a' is not defined
    
    >>>__b
    NameError: name '__b' is not defined
    
    >>>c
    999
    
    >>>d
    9999

    __all__

    另一种隐藏name的方式是在module文件中将想让导出的变量放到__all__数组里面,仍然假设是test.py文件:

    __all__ = ['_a', 'c']
    
    _a = 9
    __b = 99
    c = 999
    d = 9999

    那么,使用 from test import * 语句,只能导入_a,c,无法导入__b和d:

    >>>from test import *
    >>>_a
    9
    
    >>>__b
    NameError: name '__b' is not defined
    
    >>>c
    999
    
    >>>d
    NameError: name 'd' is not defined

    需要注意的是,无论是_X命名法,还是__all__数组,它们能够隐藏name的前提是使用 from moudle import *语法,如果不是使用的该语法,那么,_X和__all__隐藏不了任何name,所有的name都可以被访问。

  • 相关阅读:
    JAVA EE企业级开发四步走
    区间dp笔记√
    TYVJ P1016 装箱问题
    树状数组的笔记√(hzwer blog)
    忠诚//线段树
    线段树笔记√
    P1005 采药
    超级书架【未完】
    P1082 找朋友
    数字三角形系列
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/9350820.html
Copyright © 2011-2022 走看看