“单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
“双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
以单下划线开头(_foo
)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo
)代表类的私有成员;以双下划线开头和结尾的(__foo__
)代表python里特殊方法专用的标识,如 __init__()
代表类的构造函数。
结论:
1、_xxx
不能用于from module import *
以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。
2、__xxx
双下划线的表示的是私有类型的变量。只能是允许这个类本身进行访问了。连子类也不可以
3、__xxx___
定义的是特列方法。像__init__
之类的
单下划线和双下划线的执行代码和实际调用代码
In [11]: class A():
...: def __function(self):
...: print("x")
...:
In [12]: a = A()
In [13]: a._A__function()
x
In [14]: a.__function()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-14-d28aedf4bdb5> in <module>()
----> 1 a.__function()
AttributeError: 'A' object has no attribute '__function'
私有变量
In [15]: class A(object):
...: def __init__(self):
...: self.__private()
...: self.public()
...: def __private(self):
...: print('A.__private()')
...: def public(self):
...: print('A.public()')
...:
In [16]: class B(A):
...: def __private(self):
...: print('B.__private()')
...: def public(self):
...: print('B.public()')
...:
In [17]: b = B()
A.__private()
B.public()
公有变量
In [18]: class A(object):
...: def __init__(self):
...: self._private()
...: self.public()
...: def _private(self):
...: print('A._private()')
...: def public(self):
...: print('A.public()')
...:
In [19]: class B(A):
...: def _private(self):
...: print('B._private()')
...: def public(self):
...: print('B.public()')
...:
In [20]: b = B()
B._private()
B.public()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)