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都可以被访问。

  • 相关阅读:
    Linux常用命令英文全称与中文解释
    输入一个URL之后发生了什么?
    四种基本的数据结构
    关于深拷贝
    TCP的三次握手和四次挥手
    利用正则表达式去掉字符串的前后空格
    用canvas画一个等腰三角形
    三种隐藏元素方法的区别
    消息中间件-activemq安全机制
    Netty学习(十)-Netty文件上传
  • 原文地址:https://www.cnblogs.com/chaoguo1234/p/9350820.html
Copyright © 2011-2022 走看看