python私有函数访问的简单介绍

在python中什么是私有变量域默认情况下,Python中的成员函数和成员变量都是公开的(public),在python中没有类似public,private等关键词来修饰成员函数和成员变量 。
在python中定义私有变量只需要在变量名或函数名前加上 ”__“两个下划线,那么这个函数或变量就是私有的了 。
作用域(scope),程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的 , 而限定这个名字的可用性的代码范围就是这个名字的作用域 。
作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突 。
私有变量域就是私有变量的可用范围 。
在内部,python使用一种 name mangling 技术,将 __membername替换成 _classname__membername , 也就是说 , 类的内部定义中,所有以双下划线开始的名字都被"翻译"成前面加上单下划线和类名的形式 。
例如:为了保证不能在class之外访问私有变量 , Python会在类的内部自动的把我们定义的__spam私有变量的名字替换成为
_classname__spam(注意,classname前面是一个下划线 , spam前是两个下划线),因此,用户在外部访问__spam的时候就会
提示找不到相应的变量 。
python中的私有变量和私有方法仍然是可以访问的;访问方法如下:
【python私有函数访问的简单介绍】私有变量:实例._类名__变量名
私有方法:实例._类名__方法名()
其实,Python并没有真正的私有化支持,但可用下划线得到伪私有 。尽量避免定义以下划线开头的变量!
(1)_xxx"单下划线 " 开始的成员变量叫做保护变量 , 意思是只有类实例和子类实例能访问到这些变量,需通过类提供的接口进行访问;不能用'from module import *'导入 。
(2)__xxx类中的私有变量/方法名 (Python的函数也是对象,所以成员方法称为成员变量也行得通 。)," 双下划线 " 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据 。
(3)__xxx__ 系统定义名字,前后均有一个“双下划线” 代表python里特殊方法专用的标识,如 __init__()代表类的构造函数 。
更多Python知识请关注Python视频教程栏目 。
pyrhon中私有变量的理解与运用?9.6. 私有变量
只能从对像内部访问的“私有”实例变量,在 Python 中不存在 。然而,也有一个变通的访问用于大多数 Python 代码:以一个下划线开头的命名(例如 _spam )会被处理为 API 的非公开部分(无论它是一个函数、方法或数据成员) 。它会被视为一个实现细节,无需公开 。
因为有一个正当的类私有成员用途(即避免子类里定义的命名与之冲突) , Python 提供了对这种结构的有限支持,称为 name mangling (命名编码)。任何形如 __spam 的标识(前面至少两个下划线,后面至多一个),被替代为 _classname__spam,去掉前导下划线的 classname 即当前的类名 。此语法不关注标识的位置,只要求在类定义内 。
名称重整是有助于子类重写方法,而不会打破组内的方法调用 。例如:
class Mapping:
def __init__(self, iterable):
self.items_list = []
self.__update(iterable)
def update(self, iterable):
for item in iterable:
self.items_list.append(item)
__update = update# private copy of original update() method
class MappingSubclass(Mapping):
def update(self, keys, values):
# provides new signature for update()
# but does not break __init__()
for item in zip(keys, values):
self.items_list.append(item)
需要注意的是编码规则设计为尽可能的避免冲突,被认作为私有的变量仍然有可能被访问或修改 。在特定的场合它也是有用的 , 比如调试的时候 。

推荐阅读