Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例

开头是下划线的变量(如_X):

在特定的情况下,可以吧下划线放在变量名的签名(如_X)可以防止客户端使用from *语句导入模块名时,把其中的那些变量名复制出去;但是下划线不是‘私有‘声明:仍可以使用其他导入形式看见并且修改这类变量例如使用import

__all__(语句)

此外也可以在模块顶层把变量名的字符串列表赋值给变量__all__以达到类似_X命名惯例的隐藏效果;使用此功能,from*语句只会把列在__all__列表中的这些变量名复制出来

__all__是指出要复制的变量名,而_X时指出不要被复制的变量名;Python会先寻找模块内的__all__列表(如果定义__all__的时候,只会复制__all__内的变量名,不会复制开头没有下划线的变量名),如果没有定义的话,from * 就会复制出开头没有单下划线的所有变量名

__all__列表只对from *语句这种形式有效,并不是私有声明

例子:

#test.py

key=‘got‘

_nooutpute=‘lllllllllllllll‘

error=‘fasdfsa‘

code=‘fsadfsa‘

decode=‘324324‘

__all__=[‘error‘,‘code‘,‘decode‘]

print {‘already‘: (lambda :2+2),

‘got‘:(lambda :2*4),

‘one‘: (lambda :2**4)

}[key]()

#_X__all__.py

from test import *

print(error)

print(key)

注意点:

可以看出__all__中的必须是变量名,并且在引用之前一定要进行赋值

#test.py更改测试__all__

error=‘fasdfsa‘

code=‘fsadfsa‘

decode=‘324324‘

__all__=[‘error‘,‘code‘,‘decode‘,‘testname‘]

#_x__all__.py

from test import *

print(error)

print(testname)

Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例

时间: 2024-08-06 11:24:16

Python _X __all__ 模拟 导入'私有'变量 及其注意点和实例的相关文章

关于私有变量,静态私有变量

有权访问私有变量和私有函数的公有方法称之为特权方法,对象上创建特权方法的方式有两种. 第一种:直接在构造函数中定义特权方法,基本模式如下 function MyObject(){ var privateVariable = 10; function privateFunction(){ alert(1); } this.publicMethod = function(){ privateVariable++; return privateFunction(); }//特权方法 } var aa

python的私有变量解析

在内的内部定义并使用,外部无法访问,以双下划线作为前作,定义后被python转为 _classname__变量名了 -------------------------------------------------------------------------------------- In [1]: class aa: ...: __x = 12 #私有变量_ _x ...: def px(self): ...: print 'private __x', aa.__x #内部访问 ...:

19. Python 类的重写   类的私有变量和私有方法

1.类的重写 例子: class parent(object):     name = 'parent'     age = 100     def __init__(self):         print('my name is parent')     def get_name(self):         return self.name     def get_age(self):         return self.age class child(parent):     nam

python 类的私有变量和私有方法

#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2017/11/08 8:46 # @Author : lijunjiang # @File : class3.py """ 类的私有变量和私有方法 在Python中可以通过在属性变量名前加上双下划线定义属性为私有属性 特殊变量命名 1. _xx 以单下划线开头的表示的是protected类型的变量.即保护类型只能允许其本身与子类进行访问.若内部变量标示,如: 当使用

python下划线,私有变量

转自:http://blog.sina.com.cn/s/blog_58649eb30100g4zo.html Python用下划线作为变量前缀和后缀指定特殊变量. "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量:不能用“from xxx import *”而导入: "双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据. 以双下划线开头和结尾的代表python里特殊方法专用的标识,如 _

访问python中的私有变量

访问python中的私有变量 要给实习生培训python, 话说我自己都不怎么会用, 不能误人子弟, 再看看一些python中的概念吧. 看到类以及私有变量时, 想到以前看过文章, 说Python里面有私有函数也能被调用, 就顺手搜索了一下, stackoverflow有个问题就是问这个的. Why are Python's 'private' methods not actually private? HOW 类里面用两个下划线__打头的, 就是私有变量/函数 (后面会说到其实不是这样的) 照

Python 私有变量

1 class Person: 2 __name = 'hotfeng' 3 def getName(self): 4 return self.__name __name是Person类的私有变量,要访问此私有变量,有两种方法: 1.p = Person() print(p._Person__name) 2.p = Person() print(p.getName()) Python的私有变量(__varName)是伪私有,其实是将__varName改写为了_ClassName__varName

[问与答]Python 中 __all__ 的作用 ?

你要是看Python的源码或者相关框架的源码,总是在 __init__.py 或者是源文件的开头看到一个 __all__ 变量的定义,今天就说说它的作用. orangleliu 问题出处 Can someone explain all in Python? 问题 我越来越多的使用Python了,经常看到 __all__ 变量再各种 __init__.py 文件中,谁能解释为什么那么做呢? 解答 它是一个string元素组成的list变量,定义了当你使用 from <module> import

类的方法重写和私有变量

1.类的方法重写 在python中继承中的一些特点: a.在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用. b.在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量.区别于在类中调用普通函数时并不需要带上self参数 c.Python总是首先查找对应类型的方法,如果它不能在派生类(子类即当前类)中找到对应的方法,它才开始到基类(父类)中逐个查找.(先在本类中查找调用的方法,找不到才去基类中找). d.由上面的关系,可以进行方法的重写,